...
Code Block |
---|
# regular class specifier
java/lang/Object
# LambdaForm specifier (syntax TBD, but probably following the output of
# -Djava.lang.invoke.MethodHandle.TRACE_RESOLVE=true
[LF_RESOLVE] java.lang.invoke.DirectMethodHandle$Holder invokeSpecialIFC L3I_I
[LF_RESOLVE] java.lang.invoke.DirectMethodHandle$Holder invokeSpecialIFC LLI_I
....
#The output of -Djava.lang.invoke.MethodHandle.TRACE_RESOLVE=true (javac HelloWorld.java):
[LF_RESOLVE] java.lang.invoke.DirectMethodHandle$Holder invokeStatic L7_L (success)
[LF_RESOLVE] java.lang.invoke.DirectMethodHandle$Holder invokeStatic LL_I (success)
[LF_RESOLVE] java.lang.invoke.DirectMethodHandle$Holder invokeSpecial L8_L (success)
[LF_RESOLVE] java.lang.invoke.Invokers$Holder invokeExact_MT L8_L (success)
[LF_RESOLVE] java.lang.invoke.DirectMethodHandle$Holder invokeStatic L3_L (success)
[LF_RESOLVE] java.lang.invoke.DirectMethodHandle$Holder invokeStatic L4_L (success)
[LF_RESOLVE] java.lang.invoke.DirectMethodHandle$Holder getReference LL_L (success)
[LF_RESOLVE] java.lang.invoke.LambdaForm$Holder identity_L LL_L (success)
[LF_RESOLVE] java.lang.invoke.LambdaForm$Holder zero_L L_L (success)
[LF_RESOLVE] java.lang.invoke.DirectMethodHandle$Holder invokeSpecial LL_L (success)
[LF_RESOLVE] java.lang.invoke.Invokers$Holder linkToTargetMethod L_L (success)
[LF_RESOLVE] java.lang.invoke.DirectMethodHandle$Holder invokeStatic L3_I (success)
[LF_RESOLVE] java.lang.invoke.DirectMethodHandle$Holder newInvokeSpecial LL_L (success)
[LF_RESOLVE] java.lang.invoke.DirectMethodHandle$Holder invokeSpecial L3_L (success)
[LF_RESOLVE] java.lang.invoke.Invokers$Holder linkToTargetMethod LL_L (success)
[LF_RESOLVE] java.lang.invoke.DirectMethodHandle$Holder invokeVirtual LL_L (success)
[LF_RESOLVE] java.lang.invoke.DirectMethodHandle$Holder newInvokeSpecial L_L (success)
[LF_RESOLVE] java.lang.invoke.DirectMethodHandle$Holder invokeInterface L3_I (success)
[LF_RESOLVE] java.lang.invoke.DirectMethodHandle$Holder invokeStatic LL_L (success)
[LF_RESOLVE] java.lang.invoke.DirectMethodHandle$Holder invokeSpecial LL_I (success)
[LF_RESOLVE] java.lang.invoke.DirectMethodHandle$Holder invokeStatic LI_I (success)
[LF_RESOLVE] java.lang.invoke.DirectMethodHandle$Holder invokeStatic L_L (fail)
[LF_RESOLVE] java.lang.invoke.DirectMethodHandle$Holder newInvokeSpecial L3_L (success)
[LF_RESOLVE] java.lang.invoke.DirectMethodHandle$Holder invokeSpecial L4_L (success)
[LF_RESOLVE] java.lang.invoke.Invokers$Holder linkToTargetMethod L3_L (success)
[LF_RESOLVE] java.lang.invoke.DirectMethodHandle$Holder newInvokeSpecial L4_L (success)
[LF_RESOLVE] java.lang.invoke.DirectMethodHandle$Holder invokeSpecial L5_L (success)
[LF_RESOLVE] java.lang.invoke.Invokers$Holder linkToTargetMethod L4_L (success)
[LF_RESOLVE] java.lang.invoke.DirectMethodHandle$Holder invokeSpecial L3_V (fail)
[LF_RESOLVE] java.lang.invoke.DirectMethodHandle$Holder invokeSpecial L4IIL_I (fail)
[LF_RESOLVE] java.lang.invoke.DirectMethodHandle$Holder newInvokeSpecial L4II_L (fail)
[LF_RESOLVE] java.lang.invoke.DirectMethodHandle$Holder invokeSpecial L5II_L (fail)
[LF_RESOLVE] java.lang.invoke.Invokers$Holder linkToTargetMethod L3IIL_L (fail)
[LF_RESOLVE] java.lang.invoke.DelegatingMethodHandle$Holder delegate L3_L (success)
[LF_RESOLVE] java.lang.invoke.DirectMethodHandle$Holder invokeSpecial L4_V (success)
[LF_RESOLVE] java.lang.invoke.DirectMethodHandle$Holder invokeVirtual L3_I (fail)
[LF_RESOLVE] java.lang.invoke.DirectMethodHandle$Holder invokeInterface L3_V (fail)
[LF_RESOLVE] java.lang.invoke.DirectMethodHandle$Holder invokeStatic L6_L (success)
[LF_RESOLVE] java.lang.invoke.DirectMethodHandle$Holder invokeSpecial L7_L (success)
[LF_RESOLVE] java.lang.invoke.DelegatingMethodHandle$Holder delegate L6_L (success)
[LF_RESOLVE] java.lang.invoke.Invokers$Holder invokeExact_MT L7_L (success)
[LF_RESOLVE] java.lang.invoke.DirectMethodHandle$Holder invokeStatic LLJ_L (success)
[LF_RESOLVE] java.lang.invoke.DirectMethodHandle$Holder invokeSpecial L3J_L (success)
[LF_RESOLVE] java.lang.invoke.DelegatingMethodHandle$Holder reinvoke_L LLJ_L (success)
[LF_RESOLVE] java.lang.invoke.DirectMethodHandle$Holder invokeStatic LJLIL_J (success)
[LF_RESOLVE] java.lang.invoke.DirectMethodHandle$Holder invokeSpecial LLJLIL_J (success)
[LF_RESOLVE] java.lang.invoke.DelegatingMethodHandle$Holder reinvoke_L LJLIL_J (success)
[LF_RESOLVE] java.lang.invoke.DirectMethodHandle$Holder invokeStatic L5_L (success)
[LF_RESOLVE] java.lang.invoke.DirectMethodHandle$Holder invokeSpecial LLJLI_J (success)
[LF_RESOLVE] java.lang.invoke.DirectMethodHandle$Holder invokeStatic LJ_L (success)
[LF_RESOLVE] java.lang.invoke.DirectMethodHandle$Holder invokeSpecial LLJ_L (success)
[LF_RESOLVE] java.lang.invoke.DirectMethodHandle$Holder invokeStatic LJI_J (success)
[LF_RESOLVE] java.lang.invoke.DirectMethodHandle$Holder invokeSpecial LLJI_J (success)
[LF_RESOLVE] java.lang.invoke.DelegatingMethodHandle$Holder reinvoke_L LJI_J (success)
[LF_RESOLVE] java.lang.invoke.DirectMethodHandle$Holder invokeStatic L4J_L (success)
[LF_RESOLVE] java.lang.invoke.DirectMethodHandle$Holder getLong LL_J (success)
[LF_RESOLVE] java.lang.invoke.DirectMethodHandle$Holder invokeSpecial LLI_J (success)
[LF_RESOLVE] java.lang.invoke.DirectMethodHandle$Holder invokeSpecial LLI_L (success)
[LF_RESOLVE] java.lang.invoke.Invokers$Holder linkToTargetMethod IL_L (success)
[LF_RESOLVE] java.lang.invoke.DirectMethodHandle$Holder invokeSpecialIFC LLI_I (success)
[LF_RESOLVE] java.lang.invoke.DirectMethodHandle$Holder invokeStaticInit LL_I (fail)
[LF_RESOLVE] java.lang.invoke.DirectMethodHandle$Holder invokeVirtual LL_I (fail)
[LF_RESOLVE] java.lang.invoke.DirectMethodHandle$Holder invokeStaticInit LL_L (success)
[LF_RESOLVE] java.lang.invoke.DirectMethodHandle$Holder newInvokeSpecial L5_L (fail)
[LF_RESOLVE] java.lang.invoke.DirectMethodHandle$Holder invokeSpecial L6_L (success)
[LF_RESOLVE] java.lang.invoke.Invokers$Holder linkToTargetMethod L5_L (success)
[LF_RESOLVE] java.lang.invoke.DirectMethodHandle$Holder newInvokeSpecial L6_L (fail)
[LF_RESOLVE] java.lang.invoke.Invokers$Holder linkToTargetMethod L6_L (success)
[LF_RESOLVE] java.lang.invoke.DirectMethodHandle$Holder invokeVirtual L3_L (fail)
[LF_RESOLVE] java.lang.invoke.DirectMethodHandle$Holder invokeInterface LL_I (fail)
[LF_RESOLVE] java.lang.invoke.DirectMethodHandle$Holder invokeStaticInit L_L (fail)
[LF_RESOLVE] java.lang.invoke.DirectMethodHandle$Holder invokeStatic LII_I (success)
[LF_RESOLVE] java.lang.invoke.DirectMethodHandle$Holder newInvokeSpecial LI_L (success)
[LF_RESOLVE] java.lang.invoke.DirectMethodHandle$Holder invokeStatic LI3_I (success)
[LF_RESOLVE] java.lang.invoke.DirectMethodHandle$Holder newInvokeSpecial LII_L (success)
[LF_RESOLVE] java.lang.invoke.DirectMethodHandle$Holder invokeSpecial LLII_L (success)
[LF_RESOLVE] java.lang.invoke.Invokers$Holder linkToTargetMethod IIL_L (success)
[LF_RESOLVE] java.lang.invoke.DirectMethodHandle$Holder invokeVirtual L3_V (success)
[LF_RESOLVE] java.lang.invoke.DirectMethodHandle$Holder invokeSpecial L4_I (fail)
[LF_RESOLVE] java.lang.invoke.DirectMethodHandle$Holder invokeVirtual L3II_L (fail)
[LF_RESOLVE] java.lang.invoke.DirectMethodHandle$Holder invokeVirtual LLI_L (fail)
[LF_RESOLVE] java.lang.invoke.DirectMethodHandle$Holder invokeSpecial L3II_L (fail)
[LF_RESOLVE] java.lang.invoke.DirectMethodHandle$Holder invokeSpecial L6_V (fail)
[LF_RESOLVE] java.lang.invoke.DirectMethodHandle$Holder invokeSpecial L5_I (fail)
[LF_RESOLVE] java.lang.invoke.DirectMethodHandle$Holder invokeStatic LL_V (fail)
[LF_RESOLVE] java.lang.invoke.DirectMethodHandle$Holder invokeStatic LLII_L (fail)
[LF_RESOLVE] java.lang.invoke.DirectMethodHandle$Holder invokeSpecial L3_I (fail)
[LF_RESOLVE] java.lang.invoke.DirectMethodHandle$Holder invokeInterface LL_L (fail)
[LF_RESOLVE] java.lang.invoke.DirectMethodHandle$Holder invokeStatic L_V (success)
[LF_RESOLVE] java.lang.invoke.DirectMethodHandle$Holder invokeStatic LI_L (success)
[LF_RESOLVE] java.lang.invoke.DirectMethodHandle$Holder invokeStatic L4_I (fail)
[LF_RESOLVE] java.lang.invoke.DirectMethodHandle$Holder invokeVirtual LL_V (fail)
[LF_RESOLVE] java.lang.invoke.DirectMethodHandle$Holder invokeStatic L3_V (fail)
total is 93.
But with LambdaForm only 2:
[LF_RESOLVE] java.lang.invoke.LambdaForm$Holder identity_L LL_L (success)
[LF_RESOLVE] java.lang.invoke.LambdaForm$Holder zero_L L_L (success)
# for LambdaForm:
# javac -J-verbose HelloWorld.java | grep grep LambdaForm | grep __JVM_LookupDefineClass__
# total is 36.
|
We collect all the LF_RESOLVE lines when parsing the classlist. At the end of the static dump, we invoke generateDirectMethodHandleHolderClassBytes to generate the DirectMethodHandle$CDSHolder1 class (as well as other holder classes that are currently generated by GenerateJLIClassesPlugin.java.)
...
Overview
Content Tools
ThemeBuilder