performance degeneration from jdk7u2 to jdk7u6?

Christian Thalinger christian.thalinger at oracle.com
Thu Jun 7 16:25:36 PDT 2012


On May 30, 2012, at 2:16 PM, Jochen Theodorou wrote:

> Am 24.05.2012 13:43, schrieb Rémi Forax:
> [...]
>> if invokedynamic knows more, you can provide a path with
>> less boxing so it's usually better.
> 
>  I changed Groovy to get rid of getCallSiteArray and added 
> backpropagation of the return type to the next directly involved method 
> call. So in
> 
> int fib(int x) {
>     if (x<=1) return 1
>     return fib(x-1)+fib(x-2)
> }
> 
> the plus will now have directly return type int, instead of Object.
> 
> In a first iteration I made a primitives taking minus method, that also 
> returns int. And nice, runtime is down from 3.5 (on update 2) to 2.5 (no 
> tiered compilation and update 6).
> 
> That is not yet making really use of the type back propagation, so in 
> the next iteration I added a (II)I plus method as well. Before the 
> callsite target type was (II)Object, now it is (Object,Object)I, so only 
> little I can save on boxing, but let us see... 2.1s! And it stabilizes 
> much faster than before too. That's almost as much gain as before (in 
> percent). Certainly more than I thought.
> 
> Had I only used the plus method and not the minus method as well, I 
> would have ended up with 4.2s. only both together do make it that fast 
> now. A behaviour I noticed with primitive optimizations as well. An 
> optimization done in isolation can make things slower or does show only 
> little gain, but in combination they are suddenly much better. Another 
> interesting aspect is, now I don't see the slowdown through tiered 
> compilation anymore. The times are more or less equal with and without 
> tiered compilation, while before it was always slower with tiered 
> compilation not disabled (in update 6 it is on by default).
> 
> So the current state of my fib program is:
> 
> indy: 2.1s
> primopts: 1.2s
> callsite caching: 4s
> 
> Now I know that using catchException is causing quite a problem for 
> indy, so I removed that guard for the math operations plus and minus. It 
> is legal, since in those cases I can be certain I don't need it. And now 
> indy is at 1.2s! That means primopts and indy are no on par. That's very 
> cool! I mean I expected indy to come near indy, but to actually get on 
> par with it... I would never have thought that is possible.

Sorry, I was to busy to even read this thread, yet.  But cool you figured it out :-)

-- Chris

> 
> The assembly is still quite big: http://rifers.org/paste/show/1717
> But much better already.
> 
> bye Jochen
> 
> -- 
> Jochen "blackdrag" Theodorou - Groovy Project Tech Lead
> blog: http://blackdragsview.blogspot.com/
> german groovy discussion newsgroup: de.comp.lang.misc
> For Groovy programming sources visit http://groovy-lang.org
> 
> _______________________________________________
> mlvm-dev mailing list
> mlvm-dev at openjdk.java.net
> http://mail.openjdk.java.net/mailman/listinfo/mlvm-dev



More information about the mlvm-dev mailing list