Created
October 12, 2016 08:20
-
-
Save rednaxelafx/c254a0545952915fb1292d6721211b54 to your computer and use it in GitHub Desktop.
Java 8 serializable lambda pitfall example, https://www.zhihu.com/question/51491241
This file contains 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
$ java -version | |
java version "1.8.0_101" | |
Java(TM) SE Runtime Environment (build 1.8.0_101-b13) | |
Java HotSpot(TM) 64-Bit Server VM (build 25.101-b13, mixed mode) | |
$ javac -cp .:/tmp/spark-2.0.1-bin-hadoop2.7/jars/spark-core_2.11-2.0.1.jar -g Demo.java | |
$ java -Djdk.internal.lambda.dumpProxyClasses=. -cp .:/tmp/spark-2.0.1-bin-hadoop2.7/jars/spark-core_2.11-2.0.1.jar Demo | |
true | |
true | |
true | |
c1 serialization succeeded | |
c2 serialization failed | |
java.io.NotSerializableException: java.io.PrintStream | |
at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1184) | |
at java.io.ObjectOutputStream.writeArray(ObjectOutputStream.java:1378) | |
at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1174) | |
at java.io.ObjectOutputStream.defaultWriteFields(ObjectOutputStream.java:1548) | |
at java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java:1509) | |
at java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1432) | |
at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1178) | |
at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:348) | |
at Demo.main(Demo.java:34) | |
c3 serialization failed | |
java.io.NotSerializableException: java.io.PrintStream | |
at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1184) | |
at java.io.ObjectOutputStream.writeArray(ObjectOutputStream.java:1378) | |
at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1174) | |
at java.io.ObjectOutputStream.defaultWriteFields(ObjectOutputStream.java:1548) | |
at java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java:1509) | |
at java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1432) | |
at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1178) | |
at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:348) | |
at Demo.main(Demo.java:46) |
This file contains 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
$ javap -verbose -c -s -l -private Demo\$\$Lambda\$1 | |
Classfile /private/tmp/Demo$$Lambda$1.class | |
Last modified Oct 12, 2016; size 754 bytes | |
MD5 checksum 81ce9dafbca34417b2dfa94f596a85a1 | |
final class Demo$$Lambda$1 implements org.apache.spark.api.java.function.VoidFunction | |
minor version: 0 | |
major version: 52 | |
flags: ACC_FINAL, ACC_SUPER, ACC_SYNTHETIC | |
Constant pool: | |
#1 = Utf8 Demo$$Lambda$1 | |
#2 = Class #1 // Demo$$Lambda$1 | |
#3 = Utf8 java/lang/Object | |
#4 = Class #3 // java/lang/Object | |
#5 = Utf8 org/apache/spark/api/java/function/VoidFunction | |
#6 = Class #5 // org/apache/spark/api/java/function/VoidFunction | |
#7 = Utf8 <init> | |
#8 = Utf8 ()V | |
#9 = NameAndType #7:#8 // "<init>":()V | |
#10 = Methodref #4.#9 // java/lang/Object."<init>":()V | |
#11 = Utf8 call | |
#12 = Utf8 (Ljava/lang/Object;)V | |
#13 = Utf8 Ljava/lang/invoke/LambdaForm$Hidden; | |
#14 = Utf8 java/lang/String | |
#15 = Class #14 // java/lang/String | |
#16 = Utf8 Demo | |
#17 = Class #16 // Demo | |
#18 = Utf8 lambda$main$28d50090$1 | |
#19 = Utf8 (Ljava/lang/String;)V | |
#20 = NameAndType #18:#19 // lambda$main$28d50090$1:(Ljava/lang/String;)V | |
#21 = Methodref #17.#20 // Demo.lambda$main$28d50090$1:(Ljava/lang/String;)V | |
#22 = Utf8 writeReplace | |
#23 = Utf8 ()Ljava/lang/Object; | |
#24 = Utf8 java/lang/invoke/SerializedLambda | |
#25 = Class #24 // java/lang/invoke/SerializedLambda | |
#26 = String #5 // org/apache/spark/api/java/function/VoidFunction | |
#27 = String #11 // call | |
#28 = String #12 // (Ljava/lang/Object;)V | |
#29 = Integer 6 | |
#30 = String #16 // Demo | |
#31 = String #18 // lambda$main$28d50090$1 | |
#32 = String #19 // (Ljava/lang/String;)V | |
#33 = Utf8 (Ljava/lang/Class;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;ILjava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;[Ljava/lang/Object;)V | |
#34 = NameAndType #7:#33 // "<init>":(Ljava/lang/Class;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;ILjava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;[Ljava/lang/Object;)V | |
#35 = Methodref #25.#34 // java/lang/invoke/SerializedLambda."<init>":(Ljava/lang/Class;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;ILjava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;[Ljava/lang/Object;)V | |
#36 = Utf8 Code | |
#37 = Utf8 RuntimeVisibleAnnotations | |
{ | |
private Demo$$Lambda$1(); | |
descriptor: ()V | |
flags: 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 void call(java.lang.Object); | |
descriptor: (Ljava/lang/Object;)V | |
flags: ACC_PUBLIC | |
Code: | |
stack=1, locals=2, args_size=2 | |
0: aload_1 | |
1: checkcast #15 // class java/lang/String | |
4: invokestatic #21 // Method Demo.lambda$main$28d50090$1:(Ljava/lang/String;)V | |
7: return | |
RuntimeVisibleAnnotations: | |
0: #13() | |
private final java.lang.Object writeReplace(); | |
descriptor: ()Ljava/lang/Object; | |
flags: ACC_PRIVATE, ACC_FINAL | |
Code: | |
stack=12, locals=1, args_size=1 | |
0: new #25 // class java/lang/invoke/SerializedLambda | |
3: dup | |
4: ldc #17 // class Demo | |
6: ldc #26 // String org/apache/spark/api/java/function/VoidFunction | |
8: ldc #27 // String call | |
10: ldc #28 // String (Ljava/lang/Object;)V | |
12: ldc #29 // int 6 | |
14: ldc #30 // String Demo | |
16: ldc #31 // String lambda$main$28d50090$1 | |
18: ldc #32 // String (Ljava/lang/String;)V | |
20: ldc #32 // String (Ljava/lang/String;)V | |
22: iconst_0 | |
23: anewarray #4 // class java/lang/Object | |
26: invokespecial #35 // Method java/lang/invoke/SerializedLambda."<init>":(Ljava/lang/Class;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;ILjava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;[Ljava/lang/Object;)V | |
29: areturn | |
} |
This file contains 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
$ javap -verbose -c -s -l -private Demo\$\$Lambda\$2 | |
Classfile /private/tmp/Demo$$Lambda$2.class | |
Last modified Oct 12, 2016; size 990 bytes | |
MD5 checksum 90fc2d221dc8ad3cf6e8f6287a6180cd | |
final class Demo$$Lambda$2 implements org.apache.spark.api.java.function.VoidFunction | |
minor version: 0 | |
major version: 52 | |
flags: ACC_FINAL, ACC_SUPER, ACC_SYNTHETIC | |
Constant pool: | |
#1 = Utf8 Demo$$Lambda$2 | |
#2 = Class #1 // Demo$$Lambda$2 | |
#3 = Utf8 java/lang/Object | |
#4 = Class #3 // java/lang/Object | |
#5 = Utf8 org/apache/spark/api/java/function/VoidFunction | |
#6 = Class #5 // org/apache/spark/api/java/function/VoidFunction | |
#7 = Utf8 arg$1 | |
#8 = Utf8 Ljava/io/PrintStream; | |
#9 = Utf8 <init> | |
#10 = Utf8 (Ljava/io/PrintStream;)V | |
#11 = Utf8 ()V | |
#12 = NameAndType #9:#11 // "<init>":()V | |
#13 = Methodref #4.#12 // java/lang/Object."<init>":()V | |
#14 = NameAndType #7:#8 // arg$1:Ljava/io/PrintStream; | |
#15 = Fieldref #2.#14 // Demo$$Lambda$2.arg$1:Ljava/io/PrintStream; | |
#16 = Utf8 get$Lambda | |
#17 = Utf8 (Ljava/io/PrintStream;)Lorg/apache/spark/api/java/function/VoidFunction; | |
#18 = NameAndType #9:#10 // "<init>":(Ljava/io/PrintStream;)V | |
#19 = Methodref #2.#18 // Demo$$Lambda$2."<init>":(Ljava/io/PrintStream;)V | |
#20 = Utf8 call | |
#21 = Utf8 (Ljava/lang/Object;)V | |
#22 = Utf8 Ljava/lang/invoke/LambdaForm$Hidden; | |
#23 = Utf8 java/lang/String | |
#24 = Class #23 // java/lang/String | |
#25 = Utf8 java/io/PrintStream | |
#26 = Class #25 // java/io/PrintStream | |
#27 = Utf8 println | |
#28 = Utf8 (Ljava/lang/String;)V | |
#29 = NameAndType #27:#28 // println:(Ljava/lang/String;)V | |
#30 = Methodref #26.#29 // java/io/PrintStream.println:(Ljava/lang/String;)V | |
#31 = Utf8 writeReplace | |
#32 = Utf8 ()Ljava/lang/Object; | |
#33 = Utf8 java/lang/invoke/SerializedLambda | |
#34 = Class #33 // java/lang/invoke/SerializedLambda | |
#35 = Utf8 Demo | |
#36 = Class #35 // Demo | |
#37 = String #5 // org/apache/spark/api/java/function/VoidFunction | |
#38 = String #20 // call | |
#39 = String #21 // (Ljava/lang/Object;)V | |
#40 = Integer 5 | |
#41 = String #25 // java/io/PrintStream | |
#42 = String #27 // println | |
#43 = String #28 // (Ljava/lang/String;)V | |
#44 = Utf8 (Ljava/lang/Class;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;ILjava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;[Ljava/lang/Object;)V | |
#45 = NameAndType #9:#44 // "<init>":(Ljava/lang/Class;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;ILjava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;[Ljava/lang/Object;)V | |
#46 = Methodref #34.#45 // java/lang/invoke/SerializedLambda."<init>":(Ljava/lang/Class;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;ILjava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;[Ljava/lang/Object;)V | |
#47 = Utf8 Code | |
#48 = Utf8 RuntimeVisibleAnnotations | |
{ | |
private final java.io.PrintStream arg$1; | |
descriptor: Ljava/io/PrintStream; | |
flags: ACC_PRIVATE, ACC_FINAL | |
private Demo$$Lambda$2(java.io.PrintStream); | |
descriptor: (Ljava/io/PrintStream;)V | |
flags: ACC_PRIVATE | |
Code: | |
stack=2, locals=2, args_size=2 | |
0: aload_0 | |
1: invokespecial #13 // Method java/lang/Object."<init>":()V | |
4: aload_0 | |
5: aload_1 | |
6: putfield #15 // Field arg$1:Ljava/io/PrintStream; | |
9: return | |
private static org.apache.spark.api.java.function.VoidFunction get$Lambda(java.io.PrintStream); | |
descriptor: (Ljava/io/PrintStream;)Lorg/apache/spark/api/java/function/VoidFunction; | |
flags: ACC_PRIVATE, ACC_STATIC | |
Code: | |
stack=3, locals=1, args_size=1 | |
0: new #2 // class Demo$$Lambda$2 | |
3: dup | |
4: aload_0 | |
5: invokespecial #19 // Method "<init>":(Ljava/io/PrintStream;)V | |
8: areturn | |
public void call(java.lang.Object); | |
descriptor: (Ljava/lang/Object;)V | |
flags: ACC_PUBLIC | |
Code: | |
stack=2, locals=2, args_size=2 | |
0: aload_0 | |
1: getfield #15 // Field arg$1:Ljava/io/PrintStream; | |
4: aload_1 | |
5: checkcast #24 // class java/lang/String | |
8: invokevirtual #30 // Method java/io/PrintStream.println:(Ljava/lang/String;)V | |
11: return | |
RuntimeVisibleAnnotations: | |
0: #22() | |
private final java.lang.Object writeReplace(); | |
descriptor: ()Ljava/lang/Object; | |
flags: ACC_PRIVATE, ACC_FINAL | |
Code: | |
stack=15, locals=1, args_size=1 | |
0: new #34 // class java/lang/invoke/SerializedLambda | |
3: dup | |
4: ldc #36 // class Demo | |
6: ldc #37 // String org/apache/spark/api/java/function/VoidFunction | |
8: ldc #38 // String call | |
10: ldc #39 // String (Ljava/lang/Object;)V | |
12: ldc #40 // int 5 | |
14: ldc #41 // String java/io/PrintStream | |
16: ldc #42 // String println | |
18: ldc #43 // String (Ljava/lang/String;)V | |
20: ldc #43 // String (Ljava/lang/String;)V | |
22: iconst_1 | |
23: anewarray #4 // class java/lang/Object | |
26: dup | |
27: iconst_0 | |
28: aload_0 | |
29: getfield #15 // Field arg$1:Ljava/io/PrintStream; | |
32: aastore | |
33: invokespecial #46 // Method java/lang/invoke/SerializedLambda."<init>":(Ljava/lang/Class;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;ILjava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;[Ljava/lang/Object;)V | |
36: areturn | |
} |
This file contains 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
$ javap -verbose -c -s -l -private Demo\$\$Lambda\$3 | |
Classfile /private/tmp/Demo$$Lambda$3.class | |
Last modified Oct 12, 2016; size 1028 bytes | |
MD5 checksum 64356872527a0a3849cc8cf1ceff217a | |
final class Demo$$Lambda$3 implements org.apache.spark.api.java.function.VoidFunction | |
minor version: 0 | |
major version: 52 | |
flags: ACC_FINAL, ACC_SUPER, ACC_SYNTHETIC | |
Constant pool: | |
#1 = Utf8 Demo$$Lambda$3 | |
#2 = Class #1 // Demo$$Lambda$3 | |
#3 = Utf8 java/lang/Object | |
#4 = Class #3 // java/lang/Object | |
#5 = Utf8 org/apache/spark/api/java/function/VoidFunction | |
#6 = Class #5 // org/apache/spark/api/java/function/VoidFunction | |
#7 = Utf8 arg$1 | |
#8 = Utf8 Ljava/io/PrintStream; | |
#9 = Utf8 <init> | |
#10 = Utf8 (Ljava/io/PrintStream;)V | |
#11 = Utf8 ()V | |
#12 = NameAndType #9:#11 // "<init>":()V | |
#13 = Methodref #4.#12 // java/lang/Object."<init>":()V | |
#14 = NameAndType #7:#8 // arg$1:Ljava/io/PrintStream; | |
#15 = Fieldref #2.#14 // Demo$$Lambda$3.arg$1:Ljava/io/PrintStream; | |
#16 = Utf8 get$Lambda | |
#17 = Utf8 (Ljava/io/PrintStream;)Lorg/apache/spark/api/java/function/VoidFunction; | |
#18 = NameAndType #9:#10 // "<init>":(Ljava/io/PrintStream;)V | |
#19 = Methodref #2.#18 // Demo$$Lambda$3."<init>":(Ljava/io/PrintStream;)V | |
#20 = Utf8 call | |
#21 = Utf8 (Ljava/lang/Object;)V | |
#22 = Utf8 Ljava/lang/invoke/LambdaForm$Hidden; | |
#23 = Utf8 java/lang/String | |
#24 = Class #23 // java/lang/String | |
#25 = Utf8 Demo | |
#26 = Class #25 // Demo | |
#27 = Utf8 lambda$main$871ceed3$1 | |
#28 = Utf8 (Ljava/io/PrintStream;Ljava/lang/String;)V | |
#29 = NameAndType #27:#28 // lambda$main$871ceed3$1:(Ljava/io/PrintStream;Ljava/lang/String;)V | |
#30 = Methodref #26.#29 // Demo.lambda$main$871ceed3$1:(Ljava/io/PrintStream;Ljava/lang/String;)V | |
#31 = Utf8 writeReplace | |
#32 = Utf8 ()Ljava/lang/Object; | |
#33 = Utf8 java/lang/invoke/SerializedLambda | |
#34 = Class #33 // java/lang/invoke/SerializedLambda | |
#35 = String #5 // org/apache/spark/api/java/function/VoidFunction | |
#36 = String #20 // call | |
#37 = String #21 // (Ljava/lang/Object;)V | |
#38 = Integer 6 | |
#39 = String #25 // Demo | |
#40 = String #27 // lambda$main$871ceed3$1 | |
#41 = String #28 // (Ljava/io/PrintStream;Ljava/lang/String;)V | |
#42 = Utf8 (Ljava/lang/String;)V | |
#43 = String #42 // (Ljava/lang/String;)V | |
#44 = Utf8 (Ljava/lang/Class;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;ILjava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;[Ljava/lang/Object;)V | |
#45 = NameAndType #9:#44 // "<init>":(Ljava/lang/Class;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;ILjava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;[Ljava/lang/Object;)V | |
#46 = Methodref #34.#45 // java/lang/invoke/SerializedLambda."<init>":(Ljava/lang/Class;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;ILjava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;[Ljava/lang/Object;)V | |
#47 = Utf8 Code | |
#48 = Utf8 RuntimeVisibleAnnotations | |
{ | |
private final java.io.PrintStream arg$1; | |
descriptor: Ljava/io/PrintStream; | |
flags: ACC_PRIVATE, ACC_FINAL | |
private Demo$$Lambda$3(java.io.PrintStream); | |
descriptor: (Ljava/io/PrintStream;)V | |
flags: ACC_PRIVATE | |
Code: | |
stack=2, locals=2, args_size=2 | |
0: aload_0 | |
1: invokespecial #13 // Method java/lang/Object."<init>":()V | |
4: aload_0 | |
5: aload_1 | |
6: putfield #15 // Field arg$1:Ljava/io/PrintStream; | |
9: return | |
private static org.apache.spark.api.java.function.VoidFunction get$Lambda(java.io.PrintStream); | |
descriptor: (Ljava/io/PrintStream;)Lorg/apache/spark/api/java/function/VoidFunction; | |
flags: ACC_PRIVATE, ACC_STATIC | |
Code: | |
stack=3, locals=1, args_size=1 | |
0: new #2 // class Demo$$Lambda$3 | |
3: dup | |
4: aload_0 | |
5: invokespecial #19 // Method "<init>":(Ljava/io/PrintStream;)V | |
8: areturn | |
public void call(java.lang.Object); | |
descriptor: (Ljava/lang/Object;)V | |
flags: ACC_PUBLIC | |
Code: | |
stack=2, locals=2, args_size=2 | |
0: aload_0 | |
1: getfield #15 // Field arg$1:Ljava/io/PrintStream; | |
4: aload_1 | |
5: checkcast #24 // class java/lang/String | |
8: invokestatic #30 // Method Demo.lambda$main$871ceed3$1:(Ljava/io/PrintStream;Ljava/lang/String;)V | |
11: return | |
RuntimeVisibleAnnotations: | |
0: #22() | |
private final java.lang.Object writeReplace(); | |
descriptor: ()Ljava/lang/Object; | |
flags: ACC_PRIVATE, ACC_FINAL | |
Code: | |
stack=15, locals=1, args_size=1 | |
0: new #34 // class java/lang/invoke/SerializedLambda | |
3: dup | |
4: ldc #26 // class Demo | |
6: ldc #35 // String org/apache/spark/api/java/function/VoidFunction | |
8: ldc #36 // String call | |
10: ldc #37 // String (Ljava/lang/Object;)V | |
12: ldc #38 // int 6 | |
14: ldc #39 // String Demo | |
16: ldc #40 // String lambda$main$871ceed3$1 | |
18: ldc #41 // String (Ljava/io/PrintStream;Ljava/lang/String;)V | |
20: ldc #43 // String (Ljava/lang/String;)V | |
22: iconst_1 | |
23: anewarray #4 // class java/lang/Object | |
26: dup | |
27: iconst_0 | |
28: aload_0 | |
29: getfield #15 // Field arg$1:Ljava/io/PrintStream; | |
32: aastore | |
33: invokespecial #46 // Method java/lang/invoke/SerializedLambda."<init>":(Ljava/lang/Class;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;ILjava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;[Ljava/lang/Object;)V | |
36: areturn | |
} |
This file contains 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.io.*; | |
import org.apache.spark.api.java.function.VoidFunction; | |
public class Demo { | |
public static void main(String[] args) throws Exception { | |
VoidFunction<String> c1 = s -> System.out.println(s); // non-capturing lambda | |
VoidFunction<String> c2 = System.out::println; // instance method reference | |
PrintStream sysout = System.out; // PrintStream doesn't implement Serializable | |
VoidFunction<String> c3 = s -> sysout.println(s); // capturing lambda | |
// all print true because VoidFunction extends Serializable | |
System.out.println(c1 instanceof Serializable); | |
System.out.println(c2 instanceof Serializable); | |
System.out.println(c3 instanceof Serializable); | |
ByteArrayOutputStream bos = new ByteArrayOutputStream(); | |
// try serializing the non-capturing lambda | |
boolean success = false; | |
try { | |
ObjectOutputStream out = new ObjectOutputStream(bos); | |
out.writeObject(c1); // succeed | |
success = true; | |
} catch (Exception e) { | |
System.out.println("c1 serialization failed"); | |
e.printStackTrace(System.out); | |
} | |
if (success) System.out.println("c1 serialization succeeded"); | |
// try serializing the instance method reference | |
success = false; | |
try { | |
ObjectOutputStream out = new ObjectOutputStream(bos); | |
out.writeObject(c2); // fail | |
success = true; | |
} catch (Exception e) { | |
System.out.println("c2 serialization failed"); | |
e.printStackTrace(System.out); | |
} | |
if (success) System.out.println("c2 serialization succeeded"); | |
// try serializing the capturing lambda | |
success = false; | |
try { | |
ObjectOutputStream out = new ObjectOutputStream(bos); | |
out.writeObject(c3); // fail | |
success = true; | |
} catch (Exception e) { | |
System.out.println("c3 serialization failed"); | |
e.printStackTrace(System.out); | |
} | |
if (success) System.out.println("c3 serialization succeeded"); | |
} | |
} |
This file contains 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
$ javap -verbose -c -s -l -private Demo | |
Classfile /private/tmp/Demo.class | |
Last modified Oct 12, 2016; size 4038 bytes | |
MD5 checksum 7152bad1cf7efc23680b2b45f1535f6a | |
Compiled from "Demo.java" | |
public class Demo | |
minor version: 0 | |
major version: 52 | |
flags: ACC_PUBLIC, ACC_SUPER | |
Constant pool: | |
#1 = Methodref #49.#97 // java/lang/Object."<init>":()V | |
#2 = InvokeDynamic #0:#105 // #0:call:()Lorg/apache/spark/api/java/function/VoidFunction; | |
#3 = Fieldref #106.#107 // java/lang/System.out:Ljava/io/PrintStream; | |
#4 = Methodref #49.#108 // java/lang/Object.getClass:()Ljava/lang/Class; | |
#5 = InvokeDynamic #1:#110 // #1:call:(Ljava/io/PrintStream;)Lorg/apache/spark/api/java/function/VoidFunction; | |
#6 = InvokeDynamic #2:#110 // #2:call:(Ljava/io/PrintStream;)Lorg/apache/spark/api/java/function/VoidFunction; | |
#7 = Class #112 // java/io/Serializable | |
#8 = Methodref #42.#113 // java/io/PrintStream.println:(Z)V | |
#9 = Class #114 // java/io/ByteArrayOutputStream | |
#10 = Methodref #9.#97 // java/io/ByteArrayOutputStream."<init>":()V | |
#11 = Class #115 // java/io/ObjectOutputStream | |
#12 = Methodref #11.#116 // java/io/ObjectOutputStream."<init>":(Ljava/io/OutputStream;)V | |
#13 = Methodref #11.#117 // java/io/ObjectOutputStream.writeObject:(Ljava/lang/Object;)V | |
#14 = Class #118 // java/lang/Exception | |
#15 = String #119 // c1 serialization failed | |
#16 = Methodref #42.#120 // java/io/PrintStream.println:(Ljava/lang/String;)V | |
#17 = Methodref #14.#121 // java/lang/Exception.printStackTrace:(Ljava/io/PrintStream;)V | |
#18 = String #122 // c1 serialization succeeded | |
#19 = String #123 // c2 serialization failed | |
#20 = String #124 // c2 serialization succeeded | |
#21 = String #125 // c3 serialization failed | |
#22 = String #126 // c3 serialization succeeded | |
#23 = Methodref #127.#128 // java/lang/invoke/SerializedLambda.getImplMethodName:()Ljava/lang/String; | |
#24 = Methodref #129.#130 // java/lang/String.hashCode:()I | |
#25 = String #131 // println | |
#26 = Methodref #129.#132 // java/lang/String.equals:(Ljava/lang/Object;)Z | |
#27 = String #89 // lambda$main$871ceed3$1 | |
#28 = String #93 // lambda$main$28d50090$1 | |
#29 = Methodref #127.#133 // java/lang/invoke/SerializedLambda.getImplMethodKind:()I | |
#30 = Methodref #127.#134 // java/lang/invoke/SerializedLambda.getFunctionalInterfaceClass:()Ljava/lang/String; | |
#31 = String #135 // org/apache/spark/api/java/function/VoidFunction | |
#32 = Methodref #49.#132 // java/lang/Object.equals:(Ljava/lang/Object;)Z | |
#33 = Methodref #127.#136 // java/lang/invoke/SerializedLambda.getFunctionalInterfaceMethodName:()Ljava/lang/String; | |
#34 = String #137 // call | |
#35 = Methodref #127.#138 // java/lang/invoke/SerializedLambda.getFunctionalInterfaceMethodSignature:()Ljava/lang/String; | |
#36 = String #139 // (Ljava/lang/Object;)V | |
#37 = Methodref #127.#140 // java/lang/invoke/SerializedLambda.getImplClass:()Ljava/lang/String; | |
#38 = String #141 // java/io/PrintStream | |
#39 = Methodref #127.#142 // java/lang/invoke/SerializedLambda.getImplMethodSignature:()Ljava/lang/String; | |
#40 = String #94 // (Ljava/lang/String;)V | |
#41 = Methodref #127.#143 // java/lang/invoke/SerializedLambda.getCapturedArg:(I)Ljava/lang/Object; | |
#42 = Class #141 // java/io/PrintStream | |
#43 = String #144 // Demo | |
#44 = String #90 // (Ljava/io/PrintStream;Ljava/lang/String;)V | |
#45 = Class #145 // java/lang/IllegalArgumentException | |
#46 = String #146 // Invalid lambda deserialization | |
#47 = Methodref #45.#147 // java/lang/IllegalArgumentException."<init>":(Ljava/lang/String;)V | |
#48 = Class #144 // Demo | |
#49 = Class #148 // java/lang/Object | |
#50 = Utf8 <init> | |
#51 = Utf8 ()V | |
#52 = Utf8 Code | |
#53 = Utf8 LineNumberTable | |
#54 = Utf8 LocalVariableTable | |
#55 = Utf8 this | |
#56 = Utf8 LDemo; | |
#57 = Utf8 main | |
#58 = Utf8 ([Ljava/lang/String;)V | |
#59 = Utf8 out | |
#60 = Utf8 Ljava/io/ObjectOutputStream; | |
#61 = Utf8 e | |
#62 = Utf8 Ljava/lang/Exception; | |
#63 = Utf8 args | |
#64 = Utf8 [Ljava/lang/String; | |
#65 = Utf8 c1 | |
#66 = Utf8 Lorg/apache/spark/api/java/function/VoidFunction; | |
#67 = Utf8 c2 | |
#68 = Utf8 sysout | |
#69 = Utf8 Ljava/io/PrintStream; | |
#70 = Utf8 c3 | |
#71 = Utf8 bos | |
#72 = Utf8 Ljava/io/ByteArrayOutputStream; | |
#73 = Utf8 success | |
#74 = Utf8 Z | |
#75 = Utf8 LocalVariableTypeTable | |
#76 = Utf8 Lorg/apache/spark/api/java/function/VoidFunction<Ljava/lang/String;>; | |
#77 = Utf8 StackMapTable | |
#78 = Class #64 // "[Ljava/lang/String;" | |
#79 = Class #135 // org/apache/spark/api/java/function/VoidFunction | |
#80 = Class #141 // java/io/PrintStream | |
#81 = Class #114 // java/io/ByteArrayOutputStream | |
#82 = Class #118 // java/lang/Exception | |
#83 = Utf8 Exceptions | |
#84 = Utf8 $deserializeLambda$ | |
#85 = Utf8 (Ljava/lang/invoke/SerializedLambda;)Ljava/lang/Object; | |
#86 = Utf8 lambda | |
#87 = Utf8 Ljava/lang/invoke/SerializedLambda; | |
#88 = Class #149 // java/lang/String | |
#89 = Utf8 lambda$main$871ceed3$1 | |
#90 = Utf8 (Ljava/io/PrintStream;Ljava/lang/String;)V | |
#91 = Utf8 s | |
#92 = Utf8 Ljava/lang/String; | |
#93 = Utf8 lambda$main$28d50090$1 | |
#94 = Utf8 (Ljava/lang/String;)V | |
#95 = Utf8 SourceFile | |
#96 = Utf8 Demo.java | |
#97 = NameAndType #50:#51 // "<init>":()V | |
#98 = Utf8 BootstrapMethods | |
#99 = MethodHandle #6:#150 // invokestatic java/lang/invoke/LambdaMetafactory.altMetafactory:(Ljava/lang/invoke/MethodHandles$Lookup;Ljava/lang/String;Ljava/lang/invoke/MethodType;[Ljava/lang/Object;)Ljava/lang/invoke/CallSite; | |
#100 = MethodType #139 // (Ljava/lang/Object;)V | |
#101 = MethodHandle #6:#151 // invokestatic Demo.lambda$main$28d50090$1:(Ljava/lang/String;)V | |
#102 = MethodType #94 // (Ljava/lang/String;)V | |
#103 = Integer 5 | |
#104 = Integer 0 | |
#105 = NameAndType #137:#152 // call:()Lorg/apache/spark/api/java/function/VoidFunction; | |
#106 = Class #153 // java/lang/System | |
#107 = NameAndType #59:#69 // out:Ljava/io/PrintStream; | |
#108 = NameAndType #154:#155 // getClass:()Ljava/lang/Class; | |
#109 = MethodHandle #5:#16 // invokevirtual java/io/PrintStream.println:(Ljava/lang/String;)V | |
#110 = NameAndType #137:#156 // call:(Ljava/io/PrintStream;)Lorg/apache/spark/api/java/function/VoidFunction; | |
#111 = MethodHandle #6:#157 // invokestatic Demo.lambda$main$871ceed3$1:(Ljava/io/PrintStream;Ljava/lang/String;)V | |
#112 = Utf8 java/io/Serializable | |
#113 = NameAndType #131:#158 // println:(Z)V | |
#114 = Utf8 java/io/ByteArrayOutputStream | |
#115 = Utf8 java/io/ObjectOutputStream | |
#116 = NameAndType #50:#159 // "<init>":(Ljava/io/OutputStream;)V | |
#117 = NameAndType #160:#139 // writeObject:(Ljava/lang/Object;)V | |
#118 = Utf8 java/lang/Exception | |
#119 = Utf8 c1 serialization failed | |
#120 = NameAndType #131:#94 // println:(Ljava/lang/String;)V | |
#121 = NameAndType #161:#162 // printStackTrace:(Ljava/io/PrintStream;)V | |
#122 = Utf8 c1 serialization succeeded | |
#123 = Utf8 c2 serialization failed | |
#124 = Utf8 c2 serialization succeeded | |
#125 = Utf8 c3 serialization failed | |
#126 = Utf8 c3 serialization succeeded | |
#127 = Class #163 // java/lang/invoke/SerializedLambda | |
#128 = NameAndType #164:#165 // getImplMethodName:()Ljava/lang/String; | |
#129 = Class #149 // java/lang/String | |
#130 = NameAndType #166:#167 // hashCode:()I | |
#131 = Utf8 println | |
#132 = NameAndType #168:#169 // equals:(Ljava/lang/Object;)Z | |
#133 = NameAndType #170:#167 // getImplMethodKind:()I | |
#134 = NameAndType #171:#165 // getFunctionalInterfaceClass:()Ljava/lang/String; | |
#135 = Utf8 org/apache/spark/api/java/function/VoidFunction | |
#136 = NameAndType #172:#165 // getFunctionalInterfaceMethodName:()Ljava/lang/String; | |
#137 = Utf8 call | |
#138 = NameAndType #173:#165 // getFunctionalInterfaceMethodSignature:()Ljava/lang/String; | |
#139 = Utf8 (Ljava/lang/Object;)V | |
#140 = NameAndType #174:#165 // getImplClass:()Ljava/lang/String; | |
#141 = Utf8 java/io/PrintStream | |
#142 = NameAndType #175:#165 // getImplMethodSignature:()Ljava/lang/String; | |
#143 = NameAndType #176:#177 // getCapturedArg:(I)Ljava/lang/Object; | |
#144 = Utf8 Demo | |
#145 = Utf8 java/lang/IllegalArgumentException | |
#146 = Utf8 Invalid lambda deserialization | |
#147 = NameAndType #50:#94 // "<init>":(Ljava/lang/String;)V | |
#148 = Utf8 java/lang/Object | |
#149 = Utf8 java/lang/String | |
#150 = Methodref #178.#179 // java/lang/invoke/LambdaMetafactory.altMetafactory:(Ljava/lang/invoke/MethodHandles$Lookup;Ljava/lang/String;Ljava/lang/invoke/MethodType;[Ljava/lang/Object;)Ljava/lang/invoke/CallSite; | |
#151 = Methodref #48.#180 // Demo.lambda$main$28d50090$1:(Ljava/lang/String;)V | |
#152 = Utf8 ()Lorg/apache/spark/api/java/function/VoidFunction; | |
#153 = Utf8 java/lang/System | |
#154 = Utf8 getClass | |
#155 = Utf8 ()Ljava/lang/Class; | |
#156 = Utf8 (Ljava/io/PrintStream;)Lorg/apache/spark/api/java/function/VoidFunction; | |
#157 = Methodref #48.#181 // Demo.lambda$main$871ceed3$1:(Ljava/io/PrintStream;Ljava/lang/String;)V | |
#158 = Utf8 (Z)V | |
#159 = Utf8 (Ljava/io/OutputStream;)V | |
#160 = Utf8 writeObject | |
#161 = Utf8 printStackTrace | |
#162 = Utf8 (Ljava/io/PrintStream;)V | |
#163 = Utf8 java/lang/invoke/SerializedLambda | |
#164 = Utf8 getImplMethodName | |
#165 = Utf8 ()Ljava/lang/String; | |
#166 = Utf8 hashCode | |
#167 = Utf8 ()I | |
#168 = Utf8 equals | |
#169 = Utf8 (Ljava/lang/Object;)Z | |
#170 = Utf8 getImplMethodKind | |
#171 = Utf8 getFunctionalInterfaceClass | |
#172 = Utf8 getFunctionalInterfaceMethodName | |
#173 = Utf8 getFunctionalInterfaceMethodSignature | |
#174 = Utf8 getImplClass | |
#175 = Utf8 getImplMethodSignature | |
#176 = Utf8 getCapturedArg | |
#177 = Utf8 (I)Ljava/lang/Object; | |
#178 = Class #182 // java/lang/invoke/LambdaMetafactory | |
#179 = NameAndType #183:#187 // altMetafactory:(Ljava/lang/invoke/MethodHandles$Lookup;Ljava/lang/String;Ljava/lang/invoke/MethodType;[Ljava/lang/Object;)Ljava/lang/invoke/CallSite; | |
#180 = NameAndType #93:#94 // lambda$main$28d50090$1:(Ljava/lang/String;)V | |
#181 = NameAndType #89:#90 // lambda$main$871ceed3$1:(Ljava/io/PrintStream;Ljava/lang/String;)V | |
#182 = Utf8 java/lang/invoke/LambdaMetafactory | |
#183 = Utf8 altMetafactory | |
#184 = Class #189 // java/lang/invoke/MethodHandles$Lookup | |
#185 = Utf8 Lookup | |
#186 = Utf8 InnerClasses | |
#187 = Utf8 (Ljava/lang/invoke/MethodHandles$Lookup;Ljava/lang/String;Ljava/lang/invoke/MethodType;[Ljava/lang/Object;)Ljava/lang/invoke/CallSite; | |
#188 = Class #190 // java/lang/invoke/MethodHandles | |
#189 = Utf8 java/lang/invoke/MethodHandles$Lookup | |
#190 = Utf8 java/lang/invoke/MethodHandles | |
{ | |
public Demo(); | |
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 4: 0 | |
LocalVariableTable: | |
Start Length Slot Name Signature | |
0 5 0 this LDemo; | |
public static void main(java.lang.String[]) throws java.lang.Exception; | |
descriptor: ([Ljava/lang/String;)V | |
flags: ACC_PUBLIC, ACC_STATIC | |
Code: | |
stack=3, locals=8, args_size=1 | |
0: invokedynamic #2, 0 // InvokeDynamic #0:call:()Lorg/apache/spark/api/java/function/VoidFunction; | |
5: astore_1 | |
6: getstatic #3 // Field java/lang/System.out:Ljava/io/PrintStream; | |
9: dup | |
10: invokevirtual #4 // Method java/lang/Object.getClass:()Ljava/lang/Class; | |
13: pop | |
14: invokedynamic #5, 0 // InvokeDynamic #1:call:(Ljava/io/PrintStream;)Lorg/apache/spark/api/java/function/VoidFunction; | |
19: astore_2 | |
20: getstatic #3 // Field java/lang/System.out:Ljava/io/PrintStream; | |
23: astore_3 | |
24: aload_3 | |
25: invokedynamic #6, 0 // InvokeDynamic #2:call:(Ljava/io/PrintStream;)Lorg/apache/spark/api/java/function/VoidFunction; | |
30: astore 4 | |
32: getstatic #3 // Field java/lang/System.out:Ljava/io/PrintStream; | |
35: aload_1 | |
36: instanceof #7 // class java/io/Serializable | |
39: invokevirtual #8 // Method java/io/PrintStream.println:(Z)V | |
42: getstatic #3 // Field java/lang/System.out:Ljava/io/PrintStream; | |
45: aload_2 | |
46: instanceof #7 // class java/io/Serializable | |
49: invokevirtual #8 // Method java/io/PrintStream.println:(Z)V | |
52: getstatic #3 // Field java/lang/System.out:Ljava/io/PrintStream; | |
55: aload 4 | |
57: instanceof #7 // class java/io/Serializable | |
60: invokevirtual #8 // Method java/io/PrintStream.println:(Z)V | |
63: new #9 // class java/io/ByteArrayOutputStream | |
66: dup | |
67: invokespecial #10 // Method java/io/ByteArrayOutputStream."<init>":()V | |
70: astore 5 | |
72: iconst_0 | |
73: istore 6 | |
75: new #11 // class java/io/ObjectOutputStream | |
78: dup | |
79: aload 5 | |
81: invokespecial #12 // Method java/io/ObjectOutputStream."<init>":(Ljava/io/OutputStream;)V | |
84: astore 7 | |
86: aload 7 | |
88: aload_1 | |
89: invokevirtual #13 // Method java/io/ObjectOutputStream.writeObject:(Ljava/lang/Object;)V | |
92: iconst_1 | |
93: istore 6 | |
95: goto 116 | |
98: astore 7 | |
100: getstatic #3 // Field java/lang/System.out:Ljava/io/PrintStream; | |
103: ldc #15 // String c1 serialization failed | |
105: invokevirtual #16 // Method java/io/PrintStream.println:(Ljava/lang/String;)V | |
108: aload 7 | |
110: getstatic #3 // Field java/lang/System.out:Ljava/io/PrintStream; | |
113: invokevirtual #17 // Method java/lang/Exception.printStackTrace:(Ljava/io/PrintStream;)V | |
116: iload 6 | |
118: ifeq 129 | |
121: getstatic #3 // Field java/lang/System.out:Ljava/io/PrintStream; | |
124: ldc #18 // String c1 serialization succeeded | |
126: invokevirtual #16 // Method java/io/PrintStream.println:(Ljava/lang/String;)V | |
129: iconst_0 | |
130: istore 6 | |
132: new #11 // class java/io/ObjectOutputStream | |
135: dup | |
136: aload 5 | |
138: invokespecial #12 // Method java/io/ObjectOutputStream."<init>":(Ljava/io/OutputStream;)V | |
141: astore 7 | |
143: aload 7 | |
145: aload_2 | |
146: invokevirtual #13 // Method java/io/ObjectOutputStream.writeObject:(Ljava/lang/Object;)V | |
149: iconst_1 | |
150: istore 6 | |
152: goto 173 | |
155: astore 7 | |
157: getstatic #3 // Field java/lang/System.out:Ljava/io/PrintStream; | |
160: ldc #19 // String c2 serialization failed | |
162: invokevirtual #16 // Method java/io/PrintStream.println:(Ljava/lang/String;)V | |
165: aload 7 | |
167: getstatic #3 // Field java/lang/System.out:Ljava/io/PrintStream; | |
170: invokevirtual #17 // Method java/lang/Exception.printStackTrace:(Ljava/io/PrintStream;)V | |
173: iload 6 | |
175: ifeq 186 | |
178: getstatic #3 // Field java/lang/System.out:Ljava/io/PrintStream; | |
181: ldc #20 // String c2 serialization succeeded | |
183: invokevirtual #16 // Method java/io/PrintStream.println:(Ljava/lang/String;)V | |
186: iconst_0 | |
187: istore 6 | |
189: new #11 // class java/io/ObjectOutputStream | |
192: dup | |
193: aload 5 | |
195: invokespecial #12 // Method java/io/ObjectOutputStream."<init>":(Ljava/io/OutputStream;)V | |
198: astore 7 | |
200: aload 7 | |
202: aload 4 | |
204: invokevirtual #13 // Method java/io/ObjectOutputStream.writeObject:(Ljava/lang/Object;)V | |
207: iconst_1 | |
208: istore 6 | |
210: goto 231 | |
213: astore 7 | |
215: getstatic #3 // Field java/lang/System.out:Ljava/io/PrintStream; | |
218: ldc #21 // String c3 serialization failed | |
220: invokevirtual #16 // Method java/io/PrintStream.println:(Ljava/lang/String;)V | |
223: aload 7 | |
225: getstatic #3 // Field java/lang/System.out:Ljava/io/PrintStream; | |
228: invokevirtual #17 // Method java/lang/Exception.printStackTrace:(Ljava/io/PrintStream;)V | |
231: iload 6 | |
233: ifeq 244 | |
236: getstatic #3 // Field java/lang/System.out:Ljava/io/PrintStream; | |
239: ldc #22 // String c3 serialization succeeded | |
241: invokevirtual #16 // Method java/io/PrintStream.println:(Ljava/lang/String;)V | |
244: return | |
Exception table: | |
from to target type | |
75 95 98 Class java/lang/Exception | |
132 152 155 Class java/lang/Exception | |
189 210 213 Class java/lang/Exception | |
LineNumberTable: | |
line 6: 0 | |
line 7: 6 | |
line 8: 20 | |
line 9: 24 | |
line 12: 32 | |
line 13: 42 | |
line 14: 52 | |
line 16: 63 | |
line 19: 72 | |
line 21: 75 | |
line 22: 86 | |
line 23: 92 | |
line 27: 95 | |
line 24: 98 | |
line 25: 100 | |
line 26: 108 | |
line 28: 116 | |
line 31: 129 | |
line 33: 132 | |
line 34: 143 | |
line 35: 149 | |
line 39: 152 | |
line 36: 155 | |
line 37: 157 | |
line 38: 165 | |
line 40: 173 | |
line 43: 186 | |
line 45: 189 | |
line 46: 200 | |
line 47: 207 | |
line 51: 210 | |
line 48: 213 | |
line 49: 215 | |
line 50: 223 | |
line 52: 231 | |
line 53: 244 | |
LocalVariableTable: | |
Start Length Slot Name Signature | |
86 9 7 out Ljava/io/ObjectOutputStream; | |
100 16 7 e Ljava/lang/Exception; | |
143 9 7 out Ljava/io/ObjectOutputStream; | |
157 16 7 e Ljava/lang/Exception; | |
200 10 7 out Ljava/io/ObjectOutputStream; | |
215 16 7 e Ljava/lang/Exception; | |
0 245 0 args [Ljava/lang/String; | |
6 239 1 c1 Lorg/apache/spark/api/java/function/VoidFunction; | |
20 225 2 c2 Lorg/apache/spark/api/java/function/VoidFunction; | |
24 221 3 sysout Ljava/io/PrintStream; | |
32 213 4 c3 Lorg/apache/spark/api/java/function/VoidFunction; | |
72 173 5 bos Ljava/io/ByteArrayOutputStream; | |
75 170 6 success Z | |
LocalVariableTypeTable: | |
Start Length Slot Name Signature | |
6 239 1 c1 Lorg/apache/spark/api/java/function/VoidFunction<Ljava/lang/String;>; | |
20 225 2 c2 Lorg/apache/spark/api/java/function/VoidFunction<Ljava/lang/String;>; | |
32 213 4 c3 Lorg/apache/spark/api/java/function/VoidFunction<Ljava/lang/String;>; | |
StackMapTable: number_of_entries = 9 | |
frame_type = 255 /* full_frame */ | |
offset_delta = 98 | |
locals = [ class "[Ljava/lang/String;", class org/apache/spark/api/java/function/VoidFunction, class org/apache/spark/api/java/function/VoidFunction, class java/io/PrintStream, class org/apache/spark/api/java/function/VoidFunction, class java/io/ByteArrayOutputStream, int ] | |
stack = [ class java/lang/Exception ] | |
frame_type = 17 /* same */ | |
frame_type = 12 /* same */ | |
frame_type = 89 /* same_locals_1_stack_item */ | |
stack = [ class java/lang/Exception ] | |
frame_type = 17 /* same */ | |
frame_type = 12 /* same */ | |
frame_type = 90 /* same_locals_1_stack_item */ | |
stack = [ class java/lang/Exception ] | |
frame_type = 17 /* same */ | |
frame_type = 12 /* same */ | |
Exceptions: | |
throws java.lang.Exception | |
private static java.lang.Object $deserializeLambda$(java.lang.invoke.SerializedLambda); | |
descriptor: (Ljava/lang/invoke/SerializedLambda;)Ljava/lang/Object; | |
flags: ACC_PRIVATE, ACC_STATIC, ACC_SYNTHETIC | |
Code: | |
stack=3, locals=3, args_size=1 | |
0: aload_0 | |
1: invokevirtual #23 // Method java/lang/invoke/SerializedLambda.getImplMethodName:()Ljava/lang/String; | |
4: astore_1 | |
5: iconst_m1 | |
6: istore_2 | |
7: aload_1 | |
8: invokevirtual #24 // Method java/lang/String.hashCode:()I | |
11: lookupswitch { // 3 | |
-559453015: 72 | |
-314717969: 44 | |
822978427: 58 | |
default: 83 | |
} | |
44: aload_1 | |
45: ldc #25 // String println | |
47: invokevirtual #26 // Method java/lang/String.equals:(Ljava/lang/Object;)Z | |
50: ifeq 83 | |
53: iconst_0 | |
54: istore_2 | |
55: goto 83 | |
58: aload_1 | |
59: ldc #27 // String lambda$main$871ceed3$1 | |
61: invokevirtual #26 // Method java/lang/String.equals:(Ljava/lang/Object;)Z | |
64: ifeq 83 | |
67: iconst_1 | |
68: istore_2 | |
69: goto 83 | |
72: aload_1 | |
73: ldc #28 // String lambda$main$28d50090$1 | |
75: invokevirtual #26 // Method java/lang/String.equals:(Ljava/lang/Object;)Z | |
78: ifeq 83 | |
81: iconst_2 | |
82: istore_2 | |
83: iload_2 | |
84: tableswitch { // 0 to 2 | |
0: 112 | |
1: 194 | |
2: 277 | |
default: 352 | |
} | |
112: aload_0 | |
113: invokevirtual #29 // Method java/lang/invoke/SerializedLambda.getImplMethodKind:()I | |
116: iconst_5 | |
117: if_icmpne 352 | |
120: aload_0 | |
121: invokevirtual #30 // Method java/lang/invoke/SerializedLambda.getFunctionalInterfaceClass:()Ljava/lang/String; | |
124: ldc #31 // String org/apache/spark/api/java/function/VoidFunction | |
126: invokevirtual #32 // Method java/lang/Object.equals:(Ljava/lang/Object;)Z | |
129: ifeq 352 | |
132: aload_0 | |
133: invokevirtual #33 // Method java/lang/invoke/SerializedLambda.getFunctionalInterfaceMethodName:()Ljava/lang/String; | |
136: ldc #34 // String call | |
138: invokevirtual #32 // Method java/lang/Object.equals:(Ljava/lang/Object;)Z | |
141: ifeq 352 | |
144: aload_0 | |
145: invokevirtual #35 // Method java/lang/invoke/SerializedLambda.getFunctionalInterfaceMethodSignature:()Ljava/lang/String; | |
148: ldc #36 // String (Ljava/lang/Object;)V | |
150: invokevirtual #32 // Method java/lang/Object.equals:(Ljava/lang/Object;)Z | |
153: ifeq 352 | |
156: aload_0 | |
157: invokevirtual #37 // Method java/lang/invoke/SerializedLambda.getImplClass:()Ljava/lang/String; | |
160: ldc #38 // String java/io/PrintStream | |
162: invokevirtual #32 // Method java/lang/Object.equals:(Ljava/lang/Object;)Z | |
165: ifeq 352 | |
168: aload_0 | |
169: invokevirtual #39 // Method java/lang/invoke/SerializedLambda.getImplMethodSignature:()Ljava/lang/String; | |
172: ldc #40 // String (Ljava/lang/String;)V | |
174: invokevirtual #32 // Method java/lang/Object.equals:(Ljava/lang/Object;)Z | |
177: ifeq 352 | |
180: aload_0 | |
181: iconst_0 | |
182: invokevirtual #41 // Method java/lang/invoke/SerializedLambda.getCapturedArg:(I)Ljava/lang/Object; | |
185: checkcast #42 // class java/io/PrintStream | |
188: invokedynamic #5, 0 // InvokeDynamic #1:call:(Ljava/io/PrintStream;)Lorg/apache/spark/api/java/function/VoidFunction; | |
193: areturn | |
194: aload_0 | |
195: invokevirtual #29 // Method java/lang/invoke/SerializedLambda.getImplMethodKind:()I | |
198: bipush 6 | |
200: if_icmpne 352 | |
203: aload_0 | |
204: invokevirtual #30 // Method java/lang/invoke/SerializedLambda.getFunctionalInterfaceClass:()Ljava/lang/String; | |
207: ldc #31 // String org/apache/spark/api/java/function/VoidFunction | |
209: invokevirtual #32 // Method java/lang/Object.equals:(Ljava/lang/Object;)Z | |
212: ifeq 352 | |
215: aload_0 | |
216: invokevirtual #33 // Method java/lang/invoke/SerializedLambda.getFunctionalInterfaceMethodName:()Ljava/lang/String; | |
219: ldc #34 // String call | |
221: invokevirtual #32 // Method java/lang/Object.equals:(Ljava/lang/Object;)Z | |
224: ifeq 352 | |
227: aload_0 | |
228: invokevirtual #35 // Method java/lang/invoke/SerializedLambda.getFunctionalInterfaceMethodSignature:()Ljava/lang/String; | |
231: ldc #36 // String (Ljava/lang/Object;)V | |
233: invokevirtual #32 // Method java/lang/Object.equals:(Ljava/lang/Object;)Z | |
236: ifeq 352 | |
239: aload_0 | |
240: invokevirtual #37 // Method java/lang/invoke/SerializedLambda.getImplClass:()Ljava/lang/String; | |
243: ldc #43 // String Demo | |
245: invokevirtual #32 // Method java/lang/Object.equals:(Ljava/lang/Object;)Z | |
248: ifeq 352 | |
251: aload_0 | |
252: invokevirtual #39 // Method java/lang/invoke/SerializedLambda.getImplMethodSignature:()Ljava/lang/String; | |
255: ldc #44 // String (Ljava/io/PrintStream;Ljava/lang/String;)V | |
257: invokevirtual #32 // Method java/lang/Object.equals:(Ljava/lang/Object;)Z | |
260: ifeq 352 | |
263: aload_0 | |
264: iconst_0 | |
265: invokevirtual #41 // Method java/lang/invoke/SerializedLambda.getCapturedArg:(I)Ljava/lang/Object; | |
268: checkcast #42 // class java/io/PrintStream | |
271: invokedynamic #6, 0 // InvokeDynamic #2:call:(Ljava/io/PrintStream;)Lorg/apache/spark/api/java/function/VoidFunction; | |
276: areturn | |
277: aload_0 | |
278: invokevirtual #29 // Method java/lang/invoke/SerializedLambda.getImplMethodKind:()I | |
281: bipush 6 | |
283: if_icmpne 352 | |
286: aload_0 | |
287: invokevirtual #30 // Method java/lang/invoke/SerializedLambda.getFunctionalInterfaceClass:()Ljava/lang/String; | |
290: ldc #31 // String org/apache/spark/api/java/function/VoidFunction | |
292: invokevirtual #32 // Method java/lang/Object.equals:(Ljava/lang/Object;)Z | |
295: ifeq 352 | |
298: aload_0 | |
299: invokevirtual #33 // Method java/lang/invoke/SerializedLambda.getFunctionalInterfaceMethodName:()Ljava/lang/String; | |
302: ldc #34 // String call | |
304: invokevirtual #32 // Method java/lang/Object.equals:(Ljava/lang/Object;)Z | |
307: ifeq 352 | |
310: aload_0 | |
311: invokevirtual #35 // Method java/lang/invoke/SerializedLambda.getFunctionalInterfaceMethodSignature:()Ljava/lang/String; | |
314: ldc #36 // String (Ljava/lang/Object;)V | |
316: invokevirtual #32 // Method java/lang/Object.equals:(Ljava/lang/Object;)Z | |
319: ifeq 352 | |
322: aload_0 | |
323: invokevirtual #37 // Method java/lang/invoke/SerializedLambda.getImplClass:()Ljava/lang/String; | |
326: ldc #43 // String Demo | |
328: invokevirtual #32 // Method java/lang/Object.equals:(Ljava/lang/Object;)Z | |
331: ifeq 352 | |
334: aload_0 | |
335: invokevirtual #39 // Method java/lang/invoke/SerializedLambda.getImplMethodSignature:()Ljava/lang/String; | |
338: ldc #40 // String (Ljava/lang/String;)V | |
340: invokevirtual #32 // Method java/lang/Object.equals:(Ljava/lang/Object;)Z | |
343: ifeq 352 | |
346: invokedynamic #2, 0 // InvokeDynamic #0:call:()Lorg/apache/spark/api/java/function/VoidFunction; | |
351: areturn | |
352: new #45 // class java/lang/IllegalArgumentException | |
355: dup | |
356: ldc #46 // String Invalid lambda deserialization | |
358: invokespecial #47 // Method java/lang/IllegalArgumentException."<init>":(Ljava/lang/String;)V | |
361: athrow | |
LineNumberTable: | |
line 4: 0 | |
LocalVariableTable: | |
Start Length Slot Name Signature | |
0 362 0 lambda Ljava/lang/invoke/SerializedLambda; | |
StackMapTable: number_of_entries = 8 | |
frame_type = 253 /* append */ | |
offset_delta = 44 | |
locals = [ class java/lang/String, int ] | |
frame_type = 13 /* same */ | |
frame_type = 13 /* same */ | |
frame_type = 10 /* same */ | |
frame_type = 28 /* same */ | |
frame_type = 251 /* same_frame_extended */ | |
offset_delta = 81 | |
frame_type = 251 /* same_frame_extended */ | |
offset_delta = 82 | |
frame_type = 249 /* chop */ | |
offset_delta = 74 | |
private static void lambda$main$871ceed3$1(java.io.PrintStream, java.lang.String) throws java.lang.Exception; | |
descriptor: (Ljava/io/PrintStream;Ljava/lang/String;)V | |
flags: ACC_PRIVATE, ACC_STATIC, ACC_SYNTHETIC | |
Code: | |
stack=2, locals=2, args_size=2 | |
0: aload_0 | |
1: aload_1 | |
2: invokevirtual #16 // Method java/io/PrintStream.println:(Ljava/lang/String;)V | |
5: return | |
LineNumberTable: | |
line 9: 0 | |
LocalVariableTable: | |
Start Length Slot Name Signature | |
0 6 0 sysout Ljava/io/PrintStream; | |
0 6 1 s Ljava/lang/String; | |
Exceptions: | |
throws java.lang.Exception | |
private static void lambda$main$28d50090$1(java.lang.String) throws java.lang.Exception; | |
descriptor: (Ljava/lang/String;)V | |
flags: ACC_PRIVATE, ACC_STATIC, ACC_SYNTHETIC | |
Code: | |
stack=2, locals=1, args_size=1 | |
0: getstatic #3 // Field java/lang/System.out:Ljava/io/PrintStream; | |
3: aload_0 | |
4: invokevirtual #16 // Method java/io/PrintStream.println:(Ljava/lang/String;)V | |
7: return | |
LineNumberTable: | |
line 6: 0 | |
LocalVariableTable: | |
Start Length Slot Name Signature | |
0 8 0 s Ljava/lang/String; | |
Exceptions: | |
throws java.lang.Exception | |
} | |
SourceFile: "Demo.java" | |
InnerClasses: | |
public static final #185= #184 of #188; //Lookup=class java/lang/invoke/MethodHandles$Lookup of class java/lang/invoke/MethodHandles | |
BootstrapMethods: | |
0: #99 invokestatic java/lang/invoke/LambdaMetafactory.altMetafactory:(Ljava/lang/invoke/MethodHandles$Lookup;Ljava/lang/String;Ljava/lang/invoke/MethodType;[Ljava/lang/Object;)Ljava/lang/invoke/CallSite; | |
Method arguments: | |
#100 (Ljava/lang/Object;)V | |
#101 invokestatic Demo.lambda$main$28d50090$1:(Ljava/lang/String;)V | |
#102 (Ljava/lang/String;)V | |
#103 5 | |
#104 0 | |
1: #99 invokestatic java/lang/invoke/LambdaMetafactory.altMetafactory:(Ljava/lang/invoke/MethodHandles$Lookup;Ljava/lang/String;Ljava/lang/invoke/MethodType;[Ljava/lang/Object;)Ljava/lang/invoke/CallSite; | |
Method arguments: | |
#100 (Ljava/lang/Object;)V | |
#109 invokevirtual java/io/PrintStream.println:(Ljava/lang/String;)V | |
#102 (Ljava/lang/String;)V | |
#103 5 | |
#104 0 | |
2: #99 invokestatic java/lang/invoke/LambdaMetafactory.altMetafactory:(Ljava/lang/invoke/MethodHandles$Lookup;Ljava/lang/String;Ljava/lang/invoke/MethodType;[Ljava/lang/Object;)Ljava/lang/invoke/CallSite; | |
Method arguments: | |
#100 (Ljava/lang/Object;)V | |
#111 invokestatic Demo.lambda$main$871ceed3$1:(Ljava/io/PrintStream;Ljava/lang/String;)V | |
#102 (Ljava/lang/String;)V | |
#103 5 | |
#104 0 |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment