On Wed, 14 Oct 2020 01:44:05 GMT, Mandy Chung <mch...@openjdk.org> wrote:
>> Changes requested by iklam (Reviewer). > >> `@lambda-proxy: LambHello run ()Ljava/lang/Runnable; ()V 6 LambHello >> lambda$main$0 ()V ()V` > > Can you explain the format? `@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 ------------- PR: https://git.openjdk.java.net/jdk/pull/364