Byte code or branching method handle?

Charles Oliver Nutter headius at headius.com
Fri Jun 8 12:12:58 PDT 2012


This isn't a bad rule of thumb, but I'd add a caveat:

* If you know one concrete shape will always fit the execution, emit
the bytecode IFF it's of a reasonable size

Because method handles can blur the lines between methods and dodge
some JVM inlining/optimization thresholds, they're often useful for
encapsulating nontrivial logic that would bloat up a method body. For
example, if you have a lot of pre/post setup for a given call or you
have a more complicated expression you want to run as a unit
repeatedly, you might be better off shoving that into handles and
letting the JVM decide what to inline. Emitting the bytecode in-place
is basically like hand inlining...to be used with caution.

- Charlie

On Mon, May 28, 2012 at 12:45 PM, Attila Szegedi <szegedia at gmail.com> wrote:
> My rule of thumb is: if you know that one concrete code shape will
> always fit the execution, I'd just emit the bytecode. Invokedynamic is
> great for cases where the executed code needs to change from time to
> time. You can also combine it - the invocation of actual property
> getters "getA()", "getB()" etc. are invokeDynamic linked, and the
> branching is in bytecode; i.e. if you know that the sequence at that
> point in the code will always be "a.b.c.d".
>
> Attila.
>
> On Sun, May 27, 2012 at 11:12 AM, Dain Sundstrom <dain at iq80.com> wrote:
>> Hi all,
>>
>> I have a general strategy question about using invoke dynamic.  Say I have a dynamic language that has null safe property chaining where "a.b.c.d" results in null if a null is encountered anywhere in the chain.  I could implement this two ways, 1) generate byte code that checks for nulls or 2) use a guarded method handle at each step that takes care of the nulls.  Either option is ok with me, but I'd rather not write both versions to and then try to figure out which one will make the JVM angry.
>>
>> As a broader question, there are lots of places where I can make this type of decision (e.g., pass by value parameters, copy on assignment value classes), is there a rule of thumb for going with traditional byte code over branching method handles?
>>
>> Thanks,
>>
>> -dain
>> _______________________________________________
>> mlvm-dev mailing list
>> mlvm-dev at openjdk.java.net
>> http://mail.openjdk.java.net/mailman/listinfo/mlvm-dev
> _______________________________________________
> 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