Re:State of the Lambda
by mgkimsal on Saturday September 22, 2012 @06:44PM
(#4559252)
But.... this was in my verbal presentation - move that @compilestatic benchmark to the first test - it'll be different. There's something about running it after the other two which is adding to the benefit - caching maybe? Moving it to the first one gives me 18-20ms generally. Try it :)
[ Parent
| on HN ]
Just a guess but the JIT may be detecting the recursion and replacing it with a loop. The recursion signature is the same for each method so the JIT may be able to catch that.
Letting the JIT warm up is enlightening though, I looped the 3 tests 1000 times and also looped my ruby test 1000 times and I get this:
Explicit type w/@CompileStatic took 5 ms
Groovy w/ explicit types took 11 ms
Full dynamic took 75 ms
Ruby took 464msVery interesting - haven't compared it to Ruby, but the 75ms was interesting on its own. I knew dynamically Groovy would generally be faster than Ruby, but not by that much, given the runtime dynamism.
Thanks! (and thanks for the pull request fix)