generated lambda names - lambda$null$0

Rafkind, Jon jon.rafkind at hp.com
Tue Oct 7 04:43:10 UTC 2014


On 10/06/2014 06:52 PM, Jonathan Gibbons wrote:
> On 10/06/2014 06:30 PM, Jonathan Gibbons wrote:
>> On 10/06/2014 06:19 PM, Rafkind, Jon wrote:
>>> BTW, javap cannot dissassemble/show any of the generated lambda code.
>> That sounds like a bug. Can you give a specific example?
>>
>> -- Jon
>>
> Partially answering my own question, for the example given in the 
> original post, javap does show pretty much everything. The lambda method 
> bodies are there: don't forget to use the -private option.

Aha, I didn't know about -private. Thanks!

> Source:
> $ more play/x.java
> public class x{
>      interface T{
>          int g();
>      }
>
>      public void test(){
>          T t1 = () -> {
>              T t2 = () -> 2;
>              return 1;
>          };
>      }
> }
>
>
> javap:
> $ javap -v -private play/x.class
> Classfile /w/jjg/work/play/x.class
>    Last modified Oct 6, 2014; size 886 bytes
>    MD5 checksum 411cf2b7dea73faaee670b25e3739753
>    Compiled from "x.java"
> public class x
>    minor version: 0
>    major version: 52
>    flags: ACC_PUBLIC, ACC_SUPER
> Constant pool:
>     #1 = Methodref          #5.#19         // java/lang/Object."<init>":()V
>     #2 = InvokeDynamic      #0:#24         // #0:g:()Lx$T;
>     #3 = InvokeDynamic      #1:#24         // #1:g:()Lx$T;
>     #4 = Class              #26            // x
>     #5 = Class              #27            // java/lang/Object
>     #6 = Class              #28            // x$T
>     #7 = Utf8               T
>     #8 = Utf8               InnerClasses
>     #9 = Utf8               <init>
>    #10 = Utf8               ()V
>    #11 = Utf8               Code
>    #12 = Utf8               LineNumberTable
>    #13 = Utf8               test
>    #14 = Utf8               lambda$test$1
>    #15 = Utf8               ()I
>    #16 = Utf8               lambda$null$0
>    #17 = Utf8               SourceFile
>    #18 = Utf8               x.java
>    #19 = NameAndType        #9:#10         // "<init>":()V
>    #20 = Utf8               BootstrapMethods
>    #21 = MethodHandle       #6:#29         // invokestatic 
> java/lang/invoke/LambdaMetafactory.metafactory:(Ljava/lang/invoke/MethodHandles$Lookup;Ljava/lang/String;Ljava/lang/invoke/MethodType;Ljava/lang/invoke/MethodType;Ljava/lang/invoke/MethodHandle;Ljava/lang/invoke/MethodType;)Ljava/lang/invoke/CallSite;
>    #22 = MethodType         #15            //  ()I
>    #23 = MethodHandle       #6:#30         // invokestatic 
> x.lambda$test$1:()I
>    #24 = NameAndType        #31:#32        // g:()Lx$T;
>    #25 = MethodHandle       #6:#33         // invokestatic 
> x.lambda$null$0:()I
>    #26 = Utf8               x
>    #27 = Utf8               java/lang/Object
>    #28 = Utf8               x$T
>    #29 = Methodref          #34.#35        // 
> java/lang/invoke/LambdaMetafactory.metafactory:(Ljava/lang/invoke/MethodHandles$Lookup;Ljava/lang/String;Ljava/lang/invoke/MethodType;Ljava/lang/invoke/MethodType;Ljava/lang/invoke/MethodHandle;Ljava/lang/invoke/MethodType;)Ljava/lang/invoke/CallSite;
>    #30 = Methodref          #4.#36         // x.lambda$test$1:()I
>    #31 = Utf8               g
>    #32 = Utf8               ()Lx$T;
>    #33 = Methodref          #4.#37         // x.lambda$null$0:()I
>    #34 = Class              #38            // 
> java/lang/invoke/LambdaMetafactory
>    #35 = NameAndType        #39:#42        // 
> metafactory:(Ljava/lang/invoke/MethodHandles$Lookup;Ljava/lang/String;Ljava/lang/invoke/MethodType;Ljava/lang/invoke/MethodType;Ljava/lang/invoke/MethodHandle;Ljava/lang/invoke/MethodType;)Ljava/lang/invoke/CallSite;
>    #36 = NameAndType        #14:#15        // lambda$test$1:()I
>    #37 = NameAndType        #16:#15        // lambda$null$0:()I
>    #38 = Utf8 java/lang/invoke/LambdaMetafactory
>    #39 = Utf8               metafactory
>    #40 = Class              #44            // 
> java/lang/invoke/MethodHandles$Lookup
>    #41 = Utf8               Lookup
>    #42 = Utf8 
> (Ljava/lang/invoke/MethodHandles$Lookup;Ljava/lang/String;Ljava/lang/invoke/MethodType;Ljava/lang/invoke/MethodType;Ljava/lang/invoke/MethodHandle;Ljava/lang/invoke/MethodType;)Ljava/lang/invoke/CallSite;
>    #43 = Class              #45            // java/lang/invoke/MethodHandles
>    #44 = Utf8 java/lang/invoke/MethodHandles$Lookup
>    #45 = Utf8               java/lang/invoke/MethodHandles
> {
>    public x();
>      descriptor: ()V
>      flags: ACC_PUBLIC
>      Code:
>        stack=1, locals=1, args_size=1
>           0: aload_0
>           1: invokespecial #1                  // Method 
> java/lang/Object."<init>":()V
>           4: return
>        LineNumberTable:
>          line 1: 0
>          line 2: 4
>
>    public void test();
>      descriptor: ()V
>      flags: ACC_PUBLIC
>      Code:
>        stack=1, locals=2, args_size=1
>           0: invokedynamic #2,  0              // InvokeDynamic #0:g:()Lx$T;
>           5: astore_1
>           6: return
>        LineNumberTable:
>          line 7: 0
>          line 11: 6
>
>    private static int lambda$test$1();
>      descriptor: ()I
>      flags: ACC_PRIVATE, ACC_STATIC, ACC_SYNTHETIC
>      Code:
>        stack=1, locals=1, args_size=0
>           0: invokedynamic #3,  0              // InvokeDynamic #1:g:()Lx$T;
>           5: astore_0
>           6: iconst_1
>           7: ireturn
>        LineNumberTable:
>          line 8: 0
>          line 9: 6
>
>    private static int lambda$null$0();
>      descriptor: ()I
>      flags: ACC_PRIVATE, ACC_STATIC, ACC_SYNTHETIC
>      Code:
>        stack=1, locals=0, args_size=0
>           0: iconst_2
>           1: ireturn
>        LineNumberTable:
>          line 8: 0
> }
> SourceFile: "x.java"
> InnerClasses:
>    static #7= #6 of #4;                    // T=class x$T of class x
>    public static final #41= #40 of #43;    // Lookup=class 
> java/lang/invoke/MethodHandles$Lookup of class 
> java/lang/invoke/MethodHandles
> BootstrapMethods:
>    0: #21 invokestatic 
> java/lang/invoke/LambdaMetafactory.metafactory:(Ljava/lang/invoke/MethodHandles$Lookup;Ljava/lang/String;Ljava/lang/invoke/MethodType;Ljava/lang/invoke/MethodType;Ljava/lang/invoke/MethodHandle;Ljava/lang/invoke/MethodType;)Ljava/lang/invoke/CallSite;
>      Method arguments:
>        #22 ()I
>        #23 invokestatic x.lambda$test$1:()I
>        #22 ()I
>    1: #21 invokestatic 
> java/lang/invoke/LambdaMetafactory.metafactory:(Ljava/lang/invoke/MethodHandles$Lookup;Ljava/lang/String;Ljava/lang/invoke/MethodType;Ljava/lang/invoke/MethodType;Ljava/lang/invoke/MethodHandle;Ljava/lang/invoke/MethodType;)Ljava/lang/invoke/CallSite;
>      Method arguments:
>        #22 ()I
>        #25 invokestatic x.lambda$null$0:()I
>        #22 ()I
>
>
>



More information about the lambda-dev mailing list