RFR: 8247666: Support Lambda proxy classes in static CDS archive [v5]
Calvin Cheung
ccheung at openjdk.java.net
Wed Oct 14 16:27:25 UTC 2020
On Wed, 14 Oct 2020 01:44:05 GMT, Mandy Chung <mchung at 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
More information about the core-libs-dev
mailing list