20 * or visit www.oracle.com if you need additional information or have any
21 * questions.
22 */
23
24 /*
25 * @test
26 * @bug 8174749 8213307
27 * @summary MemberNameTable should reuse entries
28 * @requires vm.gc == "null"
29 * @library /test/lib
30 * @build sun.hotspot.WhiteBox
31 * @run driver ClassFileInstaller sun.hotspot.WhiteBox sun.hotspot.WhiteBox$WhiteBoxPermission
32 * @run main/othervm -XX:+UnlockDiagnosticVMOptions -XX:+WhiteBoxAPI -Xbootclasspath/a:. MemberNameLeak
33 */
34
35 import java.lang.invoke.*;
36 import jdk.test.lib.process.OutputAnalyzer;
37 import jdk.test.lib.process.ProcessTools;
38 import sun.hotspot.WhiteBox;
39 import sun.hotspot.code.Compiler;
40
41 public class MemberNameLeak {
42 static class Leak {
43 public void callMe() {
44 }
45
46 public static void main(String[] args) throws Throwable {
47 Leak leak = new Leak();
48 WhiteBox wb = WhiteBox.getWhiteBox();
49 int removedCountOrig = wb.resolvedMethodRemovedCount();
50 int removedCount;
51
52 for (int i = 0; i < 10; i++) {
53 MethodHandles.Lookup lookup = MethodHandles.lookup();
54 MethodType mt = MethodType.fromMethodDescriptorString("()V", Leak.class.getClassLoader());
55 // findSpecial leaks some native mem
56 MethodHandle mh = lookup.findSpecial(Leak.class, "callMe", mt, Leak.class);
57 mh.invokeExact(leak);
58 }
59
83 doConcurrent ? "-XX:+ExplicitGCInvokesConcurrent" : "-XX:-ExplicitGCInvokesConcurrent",
84 "-XX:+ClassUnloading",
85 "-XX:+ClassUnloadingWithConcurrentMark",
86 gc, Leak.class.getName());
87 OutputAnalyzer output = new OutputAnalyzer(pb.start());
88 output.shouldContain("ResolvedMethod entry added for MemberNameLeak$Leak.callMe()V");
89 output.shouldContain("ResolvedMethod entry found for MemberNameLeak$Leak.callMe()V");
90 output.shouldContain("ResolvedMethod entry removed");
91 output.shouldHaveExitValue(0);
92 }
93
94 public static void main(java.lang.String[] unused) throws Throwable {
95 test("-XX:+UseG1GC", false);
96 test("-XX:+UseG1GC", true);
97
98 test("-XX:+UseParallelGC", false);
99 test("-XX:+UseSerialGC", false);
100 if (!Compiler.isGraalEnabled()) { // Graal does not support CMS
101 test("-XX:+UseConcMarkSweepGC", false);
102 test("-XX:+UseConcMarkSweepGC", true);
103 test("-XX:+UseShenandoahGC", true);
104 test("-XX:+UseShenandoahGC", false);
105 }
106 }
107 }
|
20 * or visit www.oracle.com if you need additional information or have any
21 * questions.
22 */
23
24 /*
25 * @test
26 * @bug 8174749 8213307
27 * @summary MemberNameTable should reuse entries
28 * @requires vm.gc == "null"
29 * @library /test/lib
30 * @build sun.hotspot.WhiteBox
31 * @run driver ClassFileInstaller sun.hotspot.WhiteBox sun.hotspot.WhiteBox$WhiteBoxPermission
32 * @run main/othervm -XX:+UnlockDiagnosticVMOptions -XX:+WhiteBoxAPI -Xbootclasspath/a:. MemberNameLeak
33 */
34
35 import java.lang.invoke.*;
36 import jdk.test.lib.process.OutputAnalyzer;
37 import jdk.test.lib.process.ProcessTools;
38 import sun.hotspot.WhiteBox;
39 import sun.hotspot.code.Compiler;
40 import sun.hotspot.gc.GC;
41
42 public class MemberNameLeak {
43 static class Leak {
44 public void callMe() {
45 }
46
47 public static void main(String[] args) throws Throwable {
48 Leak leak = new Leak();
49 WhiteBox wb = WhiteBox.getWhiteBox();
50 int removedCountOrig = wb.resolvedMethodRemovedCount();
51 int removedCount;
52
53 for (int i = 0; i < 10; i++) {
54 MethodHandles.Lookup lookup = MethodHandles.lookup();
55 MethodType mt = MethodType.fromMethodDescriptorString("()V", Leak.class.getClassLoader());
56 // findSpecial leaks some native mem
57 MethodHandle mh = lookup.findSpecial(Leak.class, "callMe", mt, Leak.class);
58 mh.invokeExact(leak);
59 }
60
84 doConcurrent ? "-XX:+ExplicitGCInvokesConcurrent" : "-XX:-ExplicitGCInvokesConcurrent",
85 "-XX:+ClassUnloading",
86 "-XX:+ClassUnloadingWithConcurrentMark",
87 gc, Leak.class.getName());
88 OutputAnalyzer output = new OutputAnalyzer(pb.start());
89 output.shouldContain("ResolvedMethod entry added for MemberNameLeak$Leak.callMe()V");
90 output.shouldContain("ResolvedMethod entry found for MemberNameLeak$Leak.callMe()V");
91 output.shouldContain("ResolvedMethod entry removed");
92 output.shouldHaveExitValue(0);
93 }
94
95 public static void main(java.lang.String[] unused) throws Throwable {
96 test("-XX:+UseG1GC", false);
97 test("-XX:+UseG1GC", true);
98
99 test("-XX:+UseParallelGC", false);
100 test("-XX:+UseSerialGC", false);
101 if (!Compiler.isGraalEnabled()) { // Graal does not support CMS
102 test("-XX:+UseConcMarkSweepGC", false);
103 test("-XX:+UseConcMarkSweepGC", true);
104 if (GC.Shenandoah.isSupported()) {
105 test("-XX:+UseShenandoahGC", true);
106 test("-XX:+UseShenandoahGC", false);
107 }
108 }
109 }
110 }
|