On Aug 12, 2011, at 8:18 PM, Tom Rodriguez wrote: >> Well, it's the good old: >> >> @ 95 java.lang.invoke.MethodHandle::invokeExact (45 bytes) size > >> DesiredMethodLimit >> >> This seems to be the last recursive call that doesn't get inlined. Setting >> MaxRecursiveInlineLevel=0 makes it go faster. I finally filed (a separate >> bug to keep this a single change): >> >> 7078382: JSR 292: don't count method handle adapters against inlining budgets >> >> The proposed fix is: >> >> http://cr.openjdk.java.net/~twisti/7078382/ > > I wonder if we need to be slightly more selective than this. Most method > handle chains are relatively small and we shouldn't be penalized for that but > they could be arbitrarily large too. Worst case they just expand into a > bunch of call sites I guess so maybe it's not that bad. Maybe we need an > alternate metric for this, like number of call sites in the method handle > adapter?
Yes, using zero is not the best approach but it proved the point. Number of call sites could be a good metric. > > This wouldn't be so bad if method handle chains could be compiled separately. > I suspect we're going to have to support that eventually. Doing that would > make the performance cliff much smaller I think. Exactly. Today I was thinking about this a lot and did some experiments. The problem we have right now is that invokedynamic instructions have j.l.i.MethodHandle.invokeExact as callee which is a native method. Maybe we could store the methodOop of the method handle adapter somewhere (in the constant pool cache?) when we have bytecode for a method handle chain and execute that? -- Christian > > tom > >> >> The numbers are now like they should be: >> >> intelsdv07:~/mlvm/jruby$ jruby --server bench/bench_fib_complex.rb 5 35 >> fib with additional calls >> 0.865000 0.000000 0.865000 ( 0.835000) >> 0.745000 0.000000 0.745000 ( 0.745000) >> 0.750000 0.000000 0.750000 ( 0.750000) >> 0.742000 0.000000 0.742000 ( 0.742000) >> 0.743000 0.000000 0.743000 ( 0.744000) >> >> intelsdv07:~/mlvm/jruby$ jruby --server >> -Xinvokedynamic.invocation.switchpoint=true bench/bench_fib_complex.rb 5 35 >> fib with additional calls >> 0.789000 0.000000 0.789000 ( 0.759000) >> 0.661000 0.000000 0.661000 ( 0.661000) >> 0.659000 0.000000 0.659000 ( 0.660000) >> 0.661000 0.000000 0.661000 ( 0.661000) >> 0.661000 0.000000 0.661000 ( 0.661000) >> >> -- Christian >> >>> >>> - Charlie >>> _______________________________________________ >>> mlvm-dev mailing list >>> mlvm-dev@openjdk.java.net >>> http://mail.openjdk.java.net/mailman/listinfo/mlvm-dev >> >> _______________________________________________ >> mlvm-dev mailing list >> mlvm-dev@openjdk.java.net >> http://mail.openjdk.java.net/mailman/listinfo/mlvm-dev > > _______________________________________________ > mlvm-dev mailing list > mlvm-dev@openjdk.java.net > http://mail.openjdk.java.net/mailman/listinfo/mlvm-dev _______________________________________________ mlvm-dev mailing list mlvm-dev@openjdk.java.net http://mail.openjdk.java.net/mailman/listinfo/mlvm-dev