44 "Hello",
45 };
46 public static String agentClasses[] = {
47 "AnonVmClassesDuringDumpTransformer",
48 };
49
50 public static void main(String[] args) throws Throwable {
51 String agentJar =
52 ClassFileInstaller.writeJar("AnonVmClassesDuringDumpTransformer.jar",
53 ClassFileInstaller.Manifest.fromSourceFile("AnonVmClassesDuringDumpTransformer.mf"),
54 agentClasses);
55
56 String appJar =
57 ClassFileInstaller.writeJar("AnonVmClassesDuringDumpApp.jar", appClasses);
58
59 TestCommon.testDump(appJar, TestCommon.list("Hello"),
60 "-javaagent:" + agentJar,
61 // Set the following property to see logs for dynamically generated classes
62 // in STDOUT
63 "-Djava.lang.invoke.MethodHandle.DUMP_CLASS_FILES=true");
64 TestCommon.run("-cp", appJar, "Hello")
65 .assertNormalExit();
66 }
67 }
68
|
44 "Hello",
45 };
46 public static String agentClasses[] = {
47 "AnonVmClassesDuringDumpTransformer",
48 };
49
50 public static void main(String[] args) throws Throwable {
51 String agentJar =
52 ClassFileInstaller.writeJar("AnonVmClassesDuringDumpTransformer.jar",
53 ClassFileInstaller.Manifest.fromSourceFile("AnonVmClassesDuringDumpTransformer.mf"),
54 agentClasses);
55
56 String appJar =
57 ClassFileInstaller.writeJar("AnonVmClassesDuringDumpApp.jar", appClasses);
58
59 TestCommon.testDump(appJar, TestCommon.list("Hello"),
60 "-javaagent:" + agentJar,
61 // Set the following property to see logs for dynamically generated classes
62 // in STDOUT
63 "-Djava.lang.invoke.MethodHandle.DUMP_CLASS_FILES=true");
64
65 String prefix = ".class.load. ";
66 // class name pattern like the following:
67 // jdk.internal.loader.BuiltinClassLoader$$Lambda$1/1816757085
68 // java.lang.invoke.LambdaForm$MH/1585787493
69 String class_pattern = ".*Lambda([a-z0-9$]+)/([0-9]+).*";
70 String suffix = ".*source: shared objects file.*";
71 String pattern = prefix + class_pattern + suffix;
72 // during run time, anonymous classes shouldn't be loaded from the archive
73 TestCommon.run("-cp", appJar, "Hello")
74 .assertNormalExit(output -> output.shouldNotMatch(pattern));
75
76 // inspect the archive and make sure no anonymous class is in there
77 TestCommon.run("-cp", appJar,
78 "-XX:+PrintSharedArchiveAndExit", "-XX:+PrintSharedDictionary", "Hello")
79 .assertNormalExit(output -> output.shouldNotMatch(class_pattern));
80 }
81 }
82
|