Projects, which use JSR292

Charles Oliver Nutter headius at headius.com
Fri Feb 18 04:17:11 PST 2011


On Fri, Feb 18, 2011 at 5:56 AM, Charles Oliver Nutter
<headius at headius.com> wrote:
> <headius at headius.com> wrote:
>> I did just land another revision that allows Ruby to Ruby calls
>> meeting the above criteria to bind all the way through, and
>> performance dropped precipitously:
>
> The degradation for tak is just as significant:

More information, since I can't sleep. I bumped up various thresholds
and did not see an improvement. So I fired up the trusty hsdis plugin,
and looked for "tak" and the first "call" operation I found shows that
many levels of Ruby code are indeed inlining:

  0x02886e87: call	0x0282d560      ; OopMap{[240]=Oop [248]=Oop
[252]=Oop [256]=Oop [36]=Oop [40]=Oop [68]=Oop [176]=Oop [192]=Oop
[196]=Oop [200]=Oop [204]=Oop off=2892}
                                        ;*invokestatic test
                                        ; -
java.dyn.MethodHandle::invokeExact at 15
                                        ; -
sun.dyn.MethodHandleImpl$GuardWithTest::invoke_L5 at 11 (line 986)
                                        ; - java.dyn.MethodHandle::invokeExact at 8
                                        ; -
bench.bench_tak::method__0$RUBY$tak at 19 (line 2)
                                        ; -
java.dyn.MethodHandle::invokeExact at 24
                                        ; -
sun.dyn.MethodHandleImpl$GuardWithTest::invoke_L7 at 36 (line 997)
                                        ; -
java.dyn.MethodHandle::invokeExact at 12
                                        ; -
bench.bench_tak::method__0$RUBY$tak at 66 (line 5)
                                        ; -
java.dyn.MethodHandle::invokeExact at 24
                                        ; -
sun.dyn.MethodHandleImpl$GuardWithTest::invoke_L7 at 36 (line 997)
                                        ; -
java.dyn.MethodHandle::invokeExact at 12
                                        ; -
bench.bench_tak::method__0$RUBY$tak at 66 (line 5)
                                        ; -
java.dyn.MethodHandle::invokeExact at 24
                                        ; -
sun.dyn.MethodHandleImpl$GuardWithTest::invoke_L7 at 36 (line 997)
                                        ; -
java.dyn.MethodHandle::invokeExact at 12
                                        ; -
bench.bench_tak::method__0$RUBY$tak at 66 (line 5)
                                        ; -
java.dyn.MethodHandle::invokeExact at 24
                                        ; -
sun.dyn.MethodHandleImpl$GuardWithTest::invoke_L7 at 36 (line 997)
                                        ; -
java.dyn.MethodHandle::invokeExact at 12
                                        ; -
bench.bench_tak::method__0$RUBY$tak at 66 (line 5)
                                        ;   {static_call}

So...why so much slower? As far as I can see in the output, this is
the one and only "tak" emitted.

- Charlie


More information about the mlvm-dev mailing list