JRuby to Java invokedynamic dispatch
Attila Szegedi
szegedia at gmail.com
Wed Jun 8 23:10:22 PDT 2011
Woo-hoo!
On Jun 8, 2011, at 9:48 PM, Charles Oliver Nutter wrote:
> Hello friends! I have another update!
>
> I've just landed preliminary work to make JRuby directly bind Ruby to
> Java calls that were normally done via reflection! Currently only
> no-arg methods that return primitives, CharSequence/String, or void
> get patched straight through, but in those cases it makes a solid
> performance difference.
>
> Here's two benchmarks before direct binding and after:
>
> BEFORE (using invokedynamic, but bound to a DynamicMethod wrapper
> around java.lang.reflect.Method
>
> Measure System.currentTimeMillis, long becoming Fixnum
> 0.277000 0.000000 0.277000 ( 0.278000)
> 0.188000 0.000000 0.188000 ( 0.188000)
> 0.191000 0.000000 0.191000 ( 0.191000)
> 0.221000 0.000000 0.221000 ( 0.221000)
> 0.198000 0.000000 0.198000 ( 0.199000)
> Measure java.lang.Thread#name, String entering Ruby
> 0.520000 0.000000 0.520000 ( 0.520000)
> 0.380000 0.000000 0.380000 ( 0.380000)
> 0.383000 0.000000 0.383000 ( 0.383000)
> 0.378000 0.000000 0.378000 ( 0.378000)
> 0.388000 0.000000 0.388000 ( 0.389000)
>
> AFTER (using invokedynamic and MHs all the way to the target)
>
> Measure System.currentTimeMillis, int becoming Fixnum
> 0.173000 0.000000 0.173000 ( 0.172000)
> 0.126000 0.000000 0.126000 ( 0.126000)
> 0.137000 0.000000 0.137000 ( 0.137000)
> 0.148000 0.000000 0.148000 ( 0.148000)
> 0.147000 0.000000 0.147000 ( 0.147000)
> Measure java.lang.Thread#name, String entering Ruby
> 0.521000 0.000000 0.521000 ( 0.521000)
> 0.276000 0.000000 0.276000 ( 0.276000)
> 0.274000 0.000000 0.274000 ( 0.274000)
> 0.274000 0.000000 0.274000 ( 0.274000)
> 0.276000 0.000000 0.276000 ( 0.276000)
>
> In the latter case, this is only a tiny bit slower than a JRuby core
> class method that constructs a Ruby String, so the dispatch overhead
> of Ruby to Java has almost completely disappeared! Amazing!
>
> This can be disabled with jruby.invokedynamic.java=false, but since
> it's showing such a good perf improvement I've got it on by default
> right now.
>
> - Charlie
> _______________________________________________
> 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