Implementation of transfers out of closures

Mark Mahieu mark at twistedbanana.demon.co.uk
Mon Jul 14 12:33:40 PDT 2008


Here are versions which pass the code containing the Jump as a  
closure - not directly comparable to the NormalReturn class:

http://slm888.com/snippets/JumpReturnClosure.java
http://slm888.com/snippets/InlinedJumpReturnClosure.java

The inlined version seems to complete in about 50% of the time on the  
non-inlined version.


On 14 Jul 2008, at 20:09, Mark Mahieu wrote:

> On 14 Jul 2008, at 01:11, Neal Gafter wrote:
>> I have the following design constraints:
>> The "normal" case should be relatively fast. Specifically, there  
>> should be no capturing of a stack trace when the transfer is  
>> successful.
>> The structure of the generated code should take advantage of  
>> existing hotspot optimizations and enable new ones.
> I've had a quick play with the code, using a very artificial and  
> unfair recursive test designed to examine how well this technique  
> performs.
>
> On my machine, this test executes in around 250ms using normal  
> return statements, and around 10000ms after being translated to use  
> Jump and friends:
>
> http://slm888.com/snippets/NormalReturn.java
> http://slm888.com/snippets/JumpReturn.java
>
> However, manually inlining the call to transfer() within the try  
> block has a nice effect: the test completes in under 2200ms:
>
> http://slm888.com/snippets/InlinedJumpReturn.java
>
> Presumably this change is sufficient to trigger a particular  
> hotspot optimisation which isn't performed in the non-inlined  
> version, such as a straightforward branch to the code in the catch  
> block.
>
> Quite promising I think.
>
>
> Regards,
>
> Mark
>




More information about the closures-dev mailing list