Remi, OK - that is quite amazing!
Thanks for the explanation. - AJ On 10 July 2011 11:29, Rémi Forax <fo...@univ-mlv.fr> wrote: > On 07/10/2011 10:14 AM, Alexander Turner wrote: >> John, >> >> Thanks for your fascinating reply. I would just like to clarify something: >> >> " >> Another use case which benefits from this particular optimization >> trick is "static final" method handles. I.e., if you want to get >> invokedynamic-like performance in plain Java code, consider doing your >> work by invoking MH constants. This means your bootstrap logic has to >> run in the static initializer of the class containing the constants, >> which is less flexible (more eager). But it's an option. >> " >> >> Is what you are saying here that making a method handle final static >> will bring invoke performance closer to invokeExact because the >> matching logic only happens once. IE the handle cannot be repatched? I >> am not sure I fully understand this because (as I understand it) >> making a field final does not do change the way fields in the >> reference graph below the field behave. Does a mh 'know' is it final >> and so not attempt to mutate itself or anything to which it refers? > > Currently the JIT tries to replace method handle calls > by a direct call (or chain of calls) to after inline them. > This occurs if the method handle is the target of a CallSite > of an invokedynamic, if the method handle is stored > in a final static field or if the method handle is a constant > method handle loaded by a LDC. > > Basically, it works if the method handle is reachable from a static root. > > Now, if the method handle is reachable from a static root, > them JIT knows its type (its method type) so because > mh.invoke(args) <=> mh.asType(methodType(args)).invokeExact(args) > the JIT can fully inline mh.invoke(args). > >> On another note - it is great to keep hearing that so much work on >> performance is in the pipeline! >> >> Best wishes - AJ > > cheers, > Rémi > > _______________________________________________ > mlvm-dev mailing list > mlvm-dev@openjdk.java.net > http://mail.openjdk.java.net/mailman/listinfo/mlvm-dev > -- Dr Alexander J Turner http://nerds-central.blogspot.com/2008/01/about-me.html _______________________________________________ mlvm-dev mailing list mlvm-dev@openjdk.java.net http://mail.openjdk.java.net/mailman/listinfo/mlvm-dev