On Fri, 16 Oct 2020 21:25:04 GMT, Mandy Chung <mch...@openjdk.org> wrote:
>> `@lambda-proxy LambHello run ()Ljava/lang/Runnable; ()V REF_invokeStatic >> LambHello lambda$main$0 ()V ()V` >> means >> `@lambda-proxy <classname> <intf-method-name> <intf-method-sig> <bsm-arg0> >> <bsm-arg1a> <bsm-arg1b> <bsm-arg1c> >> <bsm-arg1d> <bsm-arg2>` >> It is a symbolic representation of a invoke dynamic constant pool entry. >> public class LambHello { >> public static void main(String[] args) { >> doit(() -> { >> System.out.println("Hello from Lambda"); >> }); >> } >> static void doit(Runnable t) { >> t.run(); >> } >> } >> >> An invoke dynamic constant pool of the above program is: >> ` - 7 : InvokeDynamic : bootstrap_method_index=43 name_and_type_index=8 >> arguments={50, 51, 50}` >> Other constant pool entries related to the above are: >> - 8 : NameAndType : name_index=9 signature_index=10 >> - 9 : Utf8 : 'run' >> - 10 : Utf8 : '()Ljava/lang/Runnable;' >> >> - 50 : MethodType : signature_index=6 >> - 51 : MethodHandle : ref_kind=6 ref_index=52 >> - 52 : Method : klass_index=12 name_and_type_index=53 >> - 53 : NameAndType : name_index=39 signature_index=6 >> >> - 6 : Utf8 : '()V' >> - 12 : Class : 'LambHello' {0x0000000800c10040} >> - 39 : Utf8 : 'lambda$main$0' >> The info included in the class list are: >> <classname> = LambHello >> <intf-method-name> = run >> <intf-method-sig> = ()Ljava/lang/Runnable; >> <bsm-arg0> = ()V >> <bsm-arg1a> = REF_invokeStatic >> <bsm-arg1b> = LambHello >> <bsm-arg1c> = lambda$main$0 >> <bsm-arg1d> = ()V >> <bsm-arg2> = ()V > > Since the class list file is not intended for users to edit/modify but rather > a configuration file given > when -Xshare:dump is used, the format of `@lambda-proxy` entry is internal > implementation details and so it's fine. > BTW: for the method handle reference kind, does the entry have the value > (e.g. 6) or the name ("REF_invokeStatic")? > I see both formats are described in your different replies. >> @lambda-proxy: LambHello run ()Ljava/lang/Runnable; ()V 6 LambHello >> lambda$main$0 ()V ()V > or >> @lambda-proxy LambHello run ()Ljava/lang/Runnable; ()V REF_invokeStatic >> LambHello lambda$main$0 ()V ()V For the reference kind, the first format (with number '6') will be stored in the classlist. ------------- PR: https://git.openjdk.java.net/jdk/pull/364