Last active
December 14, 2021 16:54
-
-
Save YujiSoftware/0caa8b421fd5598289bbdc3ad6dbf6a8 to your computer and use it in GitHub Desktop.
ラムダのコンパイル結果を5分で説明するよ
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Classfile /C:/Users/YujiSoftware/Desktop/java/Main$$Lambda$1.class | |
Last modified 2021/12/15; size 355 bytes | |
SHA-256 checksum 879c6dcc5fd72e49cae77892678512717f1fa1df22c94af9de737f4d56be9b40 | |
final class Main$$Lambda$1 implements java.util.Comparator | |
minor version: 0 | |
major version: 59 | |
flags: (0x1030) ACC_FINAL, ACC_SUPER, ACC_SYNTHETIC | |
this_class: #2 // Main$$Lambda$1 | |
super_class: #4 // java/lang/Object | |
interfaces: 1, fields: 0, methods: 2, attributes: 0 | |
Constant pool: | |
#1 = Utf8 Main$$Lambda$1 | |
#2 = Class #1 // Main$$Lambda$1 | |
#3 = Utf8 java/lang/Object | |
#4 = Class #3 // java/lang/Object | |
#5 = Utf8 java/util/Comparator | |
#6 = Class #5 // java/util/Comparator | |
#7 = Utf8 <init> | |
#8 = Utf8 ()V | |
#9 = NameAndType #7:#8 // "<init>":()V | |
#10 = Methodref #4.#9 // java/lang/Object."<init>":()V | |
#11 = Utf8 compare | |
#12 = Utf8 (Ljava/lang/Object;Ljava/lang/Object;)I | |
#13 = Utf8 java/lang/String | |
#14 = Class #13 // java/lang/String | |
#15 = Utf8 Main | |
#16 = Class #15 // Main | |
#17 = Utf8 lambda$sortByLength$0 | |
#18 = Utf8 (Ljava/lang/String;Ljava/lang/String;)I | |
#19 = NameAndType #17:#18 // lambda$sortByLength$0:(Ljava/lang/String;Ljava/lang/String;)I | |
#20 = Methodref #16.#19 // Main.lambda$sortByLength$0:(Ljava/lang/String;Ljava/lang/String;)I | |
#21 = Utf8 Code | |
{ | |
private Main$$Lambda$1(); | |
descriptor: ()V | |
flags: (0x0002) ACC_PRIVATE | |
Code: | |
stack=1, locals=1, args_size=1 | |
0: aload_0 | |
1: invokespecial #10 // Method java/lang/Object."<init>":()V | |
4: return | |
public int compare(java.lang.Object, java.lang.Object); | |
descriptor: (Ljava/lang/Object;Ljava/lang/Object;)I | |
flags: (0x0001) ACC_PUBLIC | |
Code: | |
stack=2, locals=3, args_size=3 | |
0: aload_1 | |
1: checkcast #14 // class java/lang/String | |
4: aload_2 | |
5: checkcast #14 // class java/lang/String | |
8: invokestatic #20 // Method Main.lambda$sortByLength$0:(Ljava/lang/String;Ljava/lang/String;)I | |
11: ireturn | |
} | |
Classfile /C:/Users/YujiSoftware/Desktop/java/Main$1.class | |
Last modified 2021/12/15; size 683 bytes | |
SHA-256 checksum 38c38132cf13cb67a30a67c5f9659700cd97ed85980f83034cff9b3c4b1d168c | |
Compiled from "Main.java" | |
class Main$1 extends java.lang.Object implements java.util.Comparator<java.lang.String> | |
minor version: 0 | |
major version: 61 | |
flags: (0x0020) ACC_SUPER | |
this_class: #14 // Main$1 | |
super_class: #2 // java/lang/Object | |
interfaces: 1, fields: 0, methods: 3, attributes: 5 | |
Constant pool: | |
#1 = Methodref #2.#3 // java/lang/Object."<init>":()V | |
#2 = Class #4 // java/lang/Object | |
#3 = NameAndType #5:#6 // "<init>":()V | |
#4 = Utf8 java/lang/Object | |
#5 = Utf8 <init> | |
#6 = Utf8 ()V | |
#7 = Methodref #8.#9 // java/lang/String.length:()I | |
#8 = Class #10 // java/lang/String | |
#9 = NameAndType #11:#12 // length:()I | |
#10 = Utf8 java/lang/String | |
#11 = Utf8 length | |
#12 = Utf8 ()I | |
#13 = Methodref #14.#15 // Main$1.compare:(Ljava/lang/String;Ljava/lang/String;)I | |
#14 = Class #16 // Main$1 | |
#15 = NameAndType #17:#18 // compare:(Ljava/lang/String;Ljava/lang/String;)I | |
#16 = Utf8 Main$1 | |
#17 = Utf8 compare | |
#18 = Utf8 (Ljava/lang/String;Ljava/lang/String;)I | |
#19 = Class #20 // java/util/Comparator | |
#20 = Utf8 java/util/Comparator | |
#21 = Utf8 Code | |
#22 = Utf8 LineNumberTable | |
#23 = Utf8 (Ljava/lang/Object;Ljava/lang/Object;)I | |
#24 = Utf8 Signature | |
#25 = Utf8 Ljava/lang/Object;Ljava/util/Comparator<Ljava/lang/String;>; | |
#26 = Utf8 SourceFile | |
#27 = Utf8 Main.java | |
#28 = Utf8 EnclosingMethod | |
#29 = Class #30 // Main | |
#30 = Utf8 Main | |
#31 = NameAndType #32:#33 // sortByLengthAnonymas:(Ljava/util/List;)V | |
#32 = Utf8 sortByLengthAnonymas | |
#33 = Utf8 (Ljava/util/List;)V | |
#34 = Utf8 NestHost | |
#35 = Utf8 InnerClasses | |
{ | |
Main$1(); | |
descriptor: ()V | |
flags: (0x0000) | |
Code: | |
stack=1, locals=1, args_size=1 | |
0: aload_0 | |
1: invokespecial #1 // Method java/lang/Object."<init>":()V | |
4: return | |
LineNumberTable: | |
line 17: 0 | |
public int compare(java.lang.String, java.lang.String); | |
descriptor: (Ljava/lang/String;Ljava/lang/String;)I | |
flags: (0x0001) ACC_PUBLIC | |
Code: | |
stack=2, locals=3, args_size=3 | |
0: aload_1 | |
1: invokevirtual #7 // Method java/lang/String.length:()I | |
4: aload_2 | |
5: invokevirtual #7 // Method java/lang/String.length:()I | |
8: isub | |
9: ireturn | |
LineNumberTable: | |
line 20: 0 | |
public int compare(java.lang.Object, java.lang.Object); | |
descriptor: (Ljava/lang/Object;Ljava/lang/Object;)I | |
flags: (0x1041) ACC_PUBLIC, ACC_BRIDGE, ACC_SYNTHETIC | |
Code: | |
stack=3, locals=3, args_size=3 | |
0: aload_0 | |
1: aload_1 | |
2: checkcast #8 // class java/lang/String | |
5: aload_2 | |
6: checkcast #8 // class java/lang/String | |
9: invokevirtual #13 // Method compare:(Ljava/lang/String;Ljava/lang/String;)I | |
12: ireturn | |
LineNumberTable: | |
line 17: 0 | |
} | |
Signature: #25 // Ljava/lang/Object;Ljava/util/Comparator<Ljava/lang/String;>; | |
SourceFile: "Main.java" | |
EnclosingMethod: #29.#31 // Main.sortByLengthAnonymas | |
NestHost: class Main | |
InnerClasses: | |
#14; // class Main$1 | |
Classfile /C:/Users/YujiSoftware/Desktop/java/Main.class | |
Last modified 2021/12/15; size 1429 bytes | |
SHA-256 checksum 1df914f2203a480d769256ccb29d60cf4cdffc0e677af05faa98ee874368cf8b | |
Compiled from "Main.java" | |
public class Main | |
minor version: 0 | |
major version: 61 | |
flags: (0x0021) ACC_PUBLIC, ACC_SUPER | |
this_class: #14 // Main | |
super_class: #2 // java/lang/Object | |
interfaces: 0, fields: 0, methods: 5, attributes: 4 | |
Constant pool: | |
#1 = Methodref #2.#3 // java/lang/Object."<init>":()V | |
#2 = Class #4 // java/lang/Object | |
#3 = NameAndType #5:#6 // "<init>":()V | |
#4 = Utf8 java/lang/Object | |
#5 = Utf8 <init> | |
#6 = Utf8 ()V | |
#7 = Methodref #8.#9 // java/util/Arrays.asList:([Ljava/lang/Object;)Ljava/util/List; | |
#8 = Class #10 // java/util/Arrays | |
#9 = NameAndType #11:#12 // asList:([Ljava/lang/Object;)Ljava/util/List; | |
#10 = Utf8 java/util/Arrays | |
#11 = Utf8 asList | |
#12 = Utf8 ([Ljava/lang/Object;)Ljava/util/List; | |
#13 = Methodref #14.#15 // Main.sortByLength:(Ljava/util/List;)V | |
#14 = Class #16 // Main | |
#15 = NameAndType #17:#18 // sortByLength:(Ljava/util/List;)V | |
#16 = Utf8 Main | |
#17 = Utf8 sortByLength | |
#18 = Utf8 (Ljava/util/List;)V | |
#19 = InvokeDynamic #0:#20 // #0:compare:()Ljava/util/Comparator; | |
#20 = NameAndType #21:#22 // compare:()Ljava/util/Comparator; | |
#21 = Utf8 compare | |
#22 = Utf8 ()Ljava/util/Comparator; | |
#23 = Methodref #24.#25 // java/util/Collections.sort:(Ljava/util/List;Ljava/util/Comparator;)V | |
#24 = Class #26 // java/util/Collections | |
#25 = NameAndType #27:#28 // sort:(Ljava/util/List;Ljava/util/Comparator;)V | |
#26 = Utf8 java/util/Collections | |
#27 = Utf8 sort | |
#28 = Utf8 (Ljava/util/List;Ljava/util/Comparator;)V | |
#29 = Class #30 // Main$1 | |
#30 = Utf8 Main$1 | |
#31 = Methodref #29.#3 // Main$1."<init>":()V | |
#32 = Methodref #33.#34 // java/lang/String.length:()I | |
#33 = Class #35 // java/lang/String | |
#34 = NameAndType #36:#37 // length:()I | |
#35 = Utf8 java/lang/String | |
#36 = Utf8 length | |
#37 = Utf8 ()I | |
#38 = Utf8 Code | |
#39 = Utf8 LineNumberTable | |
#40 = Utf8 main | |
#41 = Utf8 ([Ljava/lang/String;)V | |
#42 = Utf8 Signature | |
#43 = Utf8 (Ljava/util/List<Ljava/lang/String;>;)V | |
#44 = Utf8 sortByLengthAnonymas | |
#45 = Utf8 lambda$sortByLength$0 | |
#46 = Utf8 (Ljava/lang/String;Ljava/lang/String;)I | |
#47 = Utf8 SourceFile | |
#48 = Utf8 Main.java | |
#49 = Utf8 NestMembers | |
#50 = Utf8 BootstrapMethods | |
#51 = MethodHandle 6:#52 // REF_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; | |
#52 = Methodref #53.#54 // 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; | |
#53 = Class #55 // java/lang/invoke/LambdaMetafactory | |
#54 = NameAndType #56:#57 // 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; | |
#55 = Utf8 java/lang/invoke/LambdaMetafactory | |
#56 = Utf8 metafactory | |
#57 = 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; | |
#58 = MethodType #59 // (Ljava/lang/Object;Ljava/lang/Object;)I | |
#59 = Utf8 (Ljava/lang/Object;Ljava/lang/Object;)I | |
#60 = MethodHandle 6:#61 // REF_invokeStatic Main.lambda$sortByLength$0:(Ljava/lang/String;Ljava/lang/String;)I | |
#61 = Methodref #14.#62 // Main.lambda$sortByLength$0:(Ljava/lang/String;Ljava/lang/String;)I | |
#62 = NameAndType #45:#46 // lambda$sortByLength$0:(Ljava/lang/String;Ljava/lang/String;)I | |
#63 = MethodType #46 // (Ljava/lang/String;Ljava/lang/String;)I | |
#64 = Utf8 InnerClasses | |
#65 = Class #66 // java/lang/invoke/MethodHandles$Lookup | |
#66 = Utf8 java/lang/invoke/MethodHandles$Lookup | |
#67 = Class #68 // java/lang/invoke/MethodHandles | |
#68 = Utf8 java/lang/invoke/MethodHandles | |
#69 = Utf8 Lookup | |
{ | |
public Main(); | |
descriptor: ()V | |
flags: (0x0001) 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 7: 0 | |
public static void main(java.lang.String[]); | |
descriptor: ([Ljava/lang/String;)V | |
flags: (0x0009) ACC_PUBLIC, ACC_STATIC | |
Code: | |
stack=1, locals=1, args_size=1 | |
0: aload_0 | |
1: invokestatic #7 // Method java/util/Arrays.asList:([Ljava/lang/Object;)Ljava/util/List; | |
4: invokestatic #13 // Method sortByLength:(Ljava/util/List;)V | |
7: return | |
LineNumberTable: | |
line 9: 0 | |
line 10: 7 | |
public static void sortByLength(java.util.List<java.lang.String>); | |
descriptor: (Ljava/util/List;)V | |
flags: (0x0009) ACC_PUBLIC, ACC_STATIC | |
Code: | |
stack=2, locals=1, args_size=1 | |
0: aload_0 | |
1: invokedynamic #19, 0 // InvokeDynamic #0:compare:()Ljava/util/Comparator; | |
6: invokestatic #23 // Method java/util/Collections.sort:(Ljava/util/List;Ljava/util/Comparator;)V | |
9: return | |
LineNumberTable: | |
line 13: 0 | |
line 14: 9 | |
Signature: #43 // (Ljava/util/List<Ljava/lang/String;>;)V | |
public static void sortByLengthAnonymas(java.util.List<java.lang.String>); | |
descriptor: (Ljava/util/List;)V | |
flags: (0x0009) ACC_PUBLIC, ACC_STATIC | |
Code: | |
stack=3, locals=1, args_size=1 | |
0: aload_0 | |
1: new #29 // class Main$1 | |
4: dup | |
5: invokespecial #31 // Method Main$1."<init>":()V | |
8: invokestatic #23 // Method java/util/Collections.sort:(Ljava/util/List;Ljava/util/Comparator;)V | |
11: return | |
LineNumberTable: | |
line 17: 0 | |
line 23: 11 | |
Signature: #43 // (Ljava/util/List<Ljava/lang/String;>;)V | |
private static int lambda$sortByLength$0(java.lang.String, java.lang.String); | |
descriptor: (Ljava/lang/String;Ljava/lang/String;)I | |
flags: (0x100a) ACC_PRIVATE, ACC_STATIC, ACC_SYNTHETIC | |
Code: | |
stack=2, locals=2, args_size=2 | |
0: aload_0 | |
1: invokevirtual #32 // Method java/lang/String.length:()I | |
4: aload_1 | |
5: invokevirtual #32 // Method java/lang/String.length:()I | |
8: isub | |
9: ireturn | |
LineNumberTable: | |
line 13: 0 | |
} | |
SourceFile: "Main.java" | |
NestMembers: | |
Main$1 | |
BootstrapMethods: | |
0: #51 REF_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: | |
#58 (Ljava/lang/Object;Ljava/lang/Object;)I | |
#60 REF_invokeStatic Main.lambda$sortByLength$0:(Ljava/lang/String;Ljava/lang/String;)I | |
#63 (Ljava/lang/String;Ljava/lang/String;)I | |
InnerClasses: | |
#29; // class Main$1 | |
public static final #69= #65 of #67; // Lookup=class java/lang/invoke/MethodHandles$Lookup of class java/lang/invoke/MethodHandles |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import java.lang.String; | |
import java.util.Arrays; | |
import java.util.Collections; | |
import java.util.Comparator; | |
import java.util.List; | |
public class Main { | |
public static void main(String[] args) { | |
sortByLength(Arrays.asList(args)); | |
} | |
public static void sortByLength(List<String> list) { | |
Collections.sort(list, (o1, o2) -> o1.length() - o2.length()); | |
} | |
public static void sortByLengthAnonymas(List<String> list) { | |
Collections.sort(list, new Comparator<String>() { | |
@Override | |
public int compare(String o1, String o2) { | |
return o1.length() - o2.length(); | |
} | |
}); | |
} | |
} |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
del *.class | |
javac *.java | |
java -Djdk.internal.lambda.dumpProxyClasses=. Main | |
javap -verbose -private *.class > class.rb |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment