<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
		>
<channel>
	<title>Comments on: The Garthe JVM</title>
	<atom:link href="http://tech.puredanger.com/index.php/2007/10/09/garth-jvm/feed/" rel="self" type="application/rss+xml" />
	<link>http://tech.puredanger.com/2007/10/09/garth-jvm/</link>
	<description>Alex Miller&#039;s technical blog</description>
	<lastBuildDate>Mon, 06 Feb 2012 19:39:50 -0800</lastBuildDate>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.1.4</generator>
	<item>
		<title>By: Tripp Lilley</title>
		<link>http://tech.puredanger.com/2007/10/09/garth-jvm/comment-page-1/#comment-10448</link>
		<dc:creator>Tripp Lilley</dc:creator>
		<pubDate>Fri, 12 Oct 2007 11:53:51 +0000</pubDate>
		<guid isPermaLink="false">http://tech.puredanger.com/2007/10/09/garth-jvm/#comment-10448</guid>
		<description>If it&#039;s the anti-Duke, wouldn&#039;t that be Destro, Cobra Commander&#039;s right-hand? Which is apropos, when you consider that it&#039;s designed to destroy your assumptions about the execution context of your code...</description>
		<content:encoded><![CDATA[<p>If it&#8217;s the anti-Duke, wouldn&#8217;t that be Destro, Cobra Commander&#8217;s right-hand? Which is apropos, when you consider that it&#8217;s designed to destroy your assumptions about the execution context of your code&#8230;</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Alex</title>
		<link>http://tech.puredanger.com/2007/10/09/garth-jvm/comment-page-1/#comment-10281</link>
		<dc:creator>Alex</dc:creator>
		<pubDate>Wed, 10 Oct 2007 13:24:23 +0000</pubDate>
		<guid isPermaLink="false">http://tech.puredanger.com/2007/10/09/garth-jvm/#comment-10281</guid>
		<description>I think modifying the JVM would probably be easier but that&#039;s just a hunch.  I think what you&#039;re really talking about is static analysis and there are certainly tools out there now that will do this kind of analysis.  FindBugs does some of this by looking at the bytecode and doing analysis and I know other analysis tools (like JProbe, OptimizeIt, etc) can analyze code while it&#039;s running to determine concurrency problems like data races.</description>
		<content:encoded><![CDATA[<p>I think modifying the JVM would probably be easier but that&#8217;s just a hunch.  I think what you&#8217;re really talking about is static analysis and there are certainly tools out there now that will do this kind of analysis.  FindBugs does some of this by looking at the bytecode and doing analysis and I know other analysis tools (like JProbe, OptimizeIt, etc) can analyze code while it&#8217;s running to determine concurrency problems like data races.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Niklas Mehner</title>
		<link>http://tech.puredanger.com/2007/10/09/garth-jvm/comment-page-1/#comment-10263</link>
		<dc:creator>Niklas Mehner</dc:creator>
		<pubDate>Wed, 10 Oct 2007 08:32:47 +0000</pubDate>
		<guid isPermaLink="false">http://tech.puredanger.com/2007/10/09/garth-jvm/#comment-10263</guid>
		<description>Since performance hardly matters for this purpose:
Isn&#039;t it easier to write a simple bytecode interpreter then to modify the JVM? 

I once thought about writing a test framework that really executes all possible execution paths/reorderings using an interpreter. But that would create multiple possible execution paths at every instruction and would require some pretty advances merging of execution states to reduce the complexity.

But I really would love to see a testing framework that allows things like:

public void testParallel() {
   Interpreter i = new Interpreter();
   i.executeParallel(new Runnable1(), new Runnable2());
   i.assert(...whatever invariant we expect ...);
}

The assertion should have the semantic, that it has to be true for every possible execution path. The heap state in the interpreter could be implemented as some kind of &quot;diff&quot; to the &quot;real&quot; java heap state.

Unfortunately I never found the time to try to implement this.</description>
		<content:encoded><![CDATA[<p>Since performance hardly matters for this purpose:<br />
Isn&#8217;t it easier to write a simple bytecode interpreter then to modify the JVM? </p>
<p>I once thought about writing a test framework that really executes all possible execution paths/reorderings using an interpreter. But that would create multiple possible execution paths at every instruction and would require some pretty advances merging of execution states to reduce the complexity.</p>
<p>But I really would love to see a testing framework that allows things like:</p>
<p>public void testParallel() {<br />
   Interpreter i = new Interpreter();<br />
   i.executeParallel(new Runnable1(), new Runnable2());<br />
   i.assert(&#8230;whatever invariant we expect &#8230;);<br />
}</p>
<p>The assertion should have the semantic, that it has to be true for every possible execution path. The heap state in the interpreter could be implemented as some kind of &#8220;diff&#8221; to the &#8220;real&#8221; java heap state.</p>
<p>Unfortunately I never found the time to try to implement this.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Alex</title>
		<link>http://tech.puredanger.com/2007/10/09/garth-jvm/comment-page-1/#comment-10245</link>
		<dc:creator>Alex</dc:creator>
		<pubDate>Wed, 10 Oct 2007 04:01:06 +0000</pubDate>
		<guid isPermaLink="false">http://tech.puredanger.com/2007/10/09/garth-jvm/#comment-10245</guid>
		<description>Looks like an interesting tool though!  Good find.

I don&#039;t see how you could do anything with bytecode manipulation to affect the volatile case you were looking to test.  Looks like this tool is doing bytecode manipulation from a glance.</description>
		<content:encoded><![CDATA[<p>Looks like an interesting tool though!  Good find.</p>
<p>I don&#8217;t see how you could do anything with bytecode manipulation to affect the volatile case you were looking to test.  Looks like this tool is doing bytecode manipulation from a glance.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Michael Schidlowsky</title>
		<link>http://tech.puredanger.com/2007/10/09/garth-jvm/comment-page-1/#comment-10234</link>
		<dc:creator>Michael Schidlowsky</dc:creator>
		<pubDate>Wed, 10 Oct 2007 00:11:28 +0000</pubDate>
		<guid isPermaLink="false">http://tech.puredanger.com/2007/10/09/garth-jvm/#comment-10234</guid>
		<description>I was hoping that IBM&#039;s ConcurrentTesting tool might be just such a tool:

http://www.alphaworks.ibm.com/tech/contest?open&amp;ca=daw-flht-09282007&amp;S_TACT=106AH62W&amp;S_CMP=NEWS

But alas, I ran it on some non thread-safe code that shared variables, and it didn&#039;t cause any staleness...

For pedagogical purposes I&#039;d be willing to just do bytecode manipulation.  But I&#039;m not sure how I&#039;d use such a technique for the case I&#039;m most interested in demonstrating (variable staleness).</description>
		<content:encoded><![CDATA[<p>I was hoping that IBM&#8217;s ConcurrentTesting tool might be just such a tool:</p>
<p><a href="http://www.alphaworks.ibm.com/tech/contest?open&#038;ca=daw-flht-09282007&#038;S_TACT=106AH62W&#038;S_CMP=NEWS" rel="nofollow">http://www.alphaworks.ibm.com/tech/contest?open&#038;ca=daw-flht-09282007&#038;S_TACT=106AH62W&#038;S_CMP=NEWS</a></p>
<p>But alas, I ran it on some non thread-safe code that shared variables, and it didn&#8217;t cause any staleness&#8230;</p>
<p>For pedagogical purposes I&#8217;d be willing to just do bytecode manipulation.  But I&#8217;m not sure how I&#8217;d use such a technique for the case I&#8217;m most interested in demonstrating (variable staleness).</p>
]]></content:encoded>
	</item>
</channel>
</rss>

