generated lambda names - lambda$null$0

Jonathan Gibbons jonathan.gibbons at oracle.com
Tue Oct 7 01:51:40 UTC 2014


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.

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