Too bad Groovy isn't in here: "Alternative Languages on a JVM" http://www.azulsystems.com/events/javaone_2009/session/2009_J1_JVMLang.pdf ...
> Deeper Dive > Clojure - “almost close” ● Good: no obvious subroutine calls in inner loop ● Bad: Massive “ephemeral” object allocation - requires good GC ● But needs Escape Analysis to go really fast ● Ugly: fix-num overflow checks everywhere ● Turn off fix-nums: same speed as Java ● Weird “holes” - ● Not-optimized reflection calls here & there ● Can get reports on generated reflection calls 10 Deeper Dive > Jython - “almost close” ● Also has fix-num issue; massive allocation ● Some extra locks thrown in > JavaScript/Rhino - “almost close” ● All things are Doubles – not 'double' ● Same fix-num allocation issues as Clojure, Jython ● Otherwise looks pretty good (no fix-num checks) > JRuby – Missed The Metal ● Assuming CachingCallSite::call inlines ● Using -XX:+PrintInlining to determine ● But flag is lying: claims method inlined, but it's not 11 Common Issue – Fix-Nums > Huge allocation rate of “fix-nums” ● Allocation is not free ● Setting final fields cost a memory fence ● GC does NOT cost here ● i.e., object pooling would be a big loser > Could do much better with JIT ● Need “ultra-stupid” Escape Analysis ● Need some (easy) JIT tweaking ● e.g. Getting around Integer.valueOf(i) caching 12 JRuby – Missed The Metal > Each minor action dispatches via “call” > Assuming CachingCallSite::call inlines ● (and allows further inlining) > Using -XX:+PrintInlining to determine > But flag is lying: claims inlined, but it's not ● BimorphicInlining is 'guessing' wrong target > Confirmed w/GDB on X86 Java6 > Confirmed w/Azul profiler ● My 1st impression: can't be inlined ever Niels http://nielsmayer.com _______________________________________________ devs mailing list [email protected] http://lists.xwiki.org/mailman/listinfo/devs

