On 04/25/2012 06:38 PM, Christian Thalinger wrote: > On Apr 23, 2012, at 4:29 PM, Rémi Forax wrote: > >> On 04/24/2012 12:57 AM, Kohsuke Kawaguchi wrote: >>> On 04/23/2012 11:18 AM, Rémi Forax wrote: >>>>> So again, I don't see how shifting from method handle tree to byte >>>>> code generation would somehow make this non-issue. >>>> In fact, it's easy to know that a.foo() is a boolean because >>>> && can be only applied on booleans so the invokedynamic call >>>> corresponding to a.foo() should return a boolean. >>>> From the compiler perspective, you have to back-propagate >>>> the excepted type from the root to the leaf. >>> Charles was alluding to the same thing, so I was thinking about this, >>> and I think I understand it now. >>> >>> That's a lot of optimization that I otherwise wouldn't have to do, if >>> only boxed types and constant propagation worked well, but yeah, I see >>> how it can work now. >>> >>> Thanks for all the insights. >> BTW, I've patched the JIT to consider all final fields of a class of >> java/lang as truly final >> but that not enough for having the escape analysis to work with integers. >> It seems that because of the cache used in Integer.valueOf(), the JIT >> considers >> that the Integers are not escapable. > Correct. That's the main problem. Unfortunately the caching is now part of > the spec. > > Although something that John and I talked about yesterday could help here: > immutable (or stable) arrays. We might add some optimization for this soon > since we'd need it for bound arguments in our new JSR 292 implementation.
I've done something similar in the backport, it takes an array (in fact a map object to integer index but that an implementation detail) and generates a class with one static final field by array item and I substitute the bound argument array access by the static field when generating the bytecode. My main issue is that when the MethoHandle is GCed, the bound arguments are not GCed. > > -- Chris Rémi _______________________________________________ mlvm-dev mailing list mlvm-dev@openjdk.java.net http://mail.openjdk.java.net/mailman/listinfo/mlvm-dev