110 analyzer.shouldContain("All good");
111 } else {
112 analyzer.shouldHaveExitValue(1);
113 analyzer.shouldContain("java.lang.OutOfMemoryError");
114 analyzer.shouldNotContain("All good");
115 }
116 }
117
118 public static void main(String[] args) throws Exception {
119 if (args.length > 0) {
120 String classDir = TestClassLoaderLeak.class.getProtectionDomain().getCodeSource().getLocation().getPath();
121 for (int c = 0; c < COUNT; c++) {
122 load(classDir);
123 }
124 System.out.println("All good");
125 return;
126 }
127
128 String[][][] modeHeuristics = new String[][][] {
129 {{"normal"}, {"adaptive", "compact", "static", "aggressive"}},
130 {{"passive"}, {"passive"}}
131 };
132
133 for (String[][] mh : modeHeuristics) {
134 String mode = mh[0][0];
135 String[] heuristics = mh[1];
136 for (String h : heuristics) {
137 // Forceful enabling should work
138 passWith("-XX:ShenandoahGCMode=" + mode, "-XX:ShenandoahGCHeuristics=" + h, "-XX:+ClassUnloading");
139 passWith("-XX:ShenandoahGCMode=" + mode, "-XX:ShenandoahGCHeuristics=" + h, "-XX:+ClassUnloadingWithConcurrentMark");
140
141 // Even when concurrent unloading is disabled, Full GC has to recover
142 passWith("-XX:ShenandoahGCMode=" + mode, "-XX:ShenandoahGCHeuristics=" + h, "-XX:+ClassUnloading", "-XX:-ClassUnloadingWithConcurrentMark");
143 passWith("-XX:ShenandoahGCMode=" + mode, "-XX:ShenandoahGCHeuristics=" + h, "-XX:+ClassUnloading", "-XX:-ClassUnloadingWithConcurrentMark", "-XX:ShenandoahUnloadClassesFrequency=0");
144 passWith("-XX:ShenandoahGCMode=" + mode, "-XX:ShenandoahGCHeuristics=" + h, "-XX:+ClassUnloading", "-XX:+ClassUnloadingWithConcurrentMark", "-XX:ShenandoahUnloadClassesFrequency=0");
145
146 // Should OOME when unloading forcefully disabled, even if local flags try to enable it back
147 failWith("-XX:ShenandoahGCMode=" + mode, "-XX:ShenandoahGCHeuristics=" + h, "-XX:-ClassUnloading");
148 failWith("-XX:ShenandoahGCMode=" + mode, "-XX:ShenandoahGCHeuristics=" + h, "-XX:-ClassUnloading", "-XX:+ClassUnloadingWithConcurrentMark");
149 failWith("-XX:ShenandoahGCMode=" + mode, "-XX:ShenandoahGCHeuristics=" + h, "-XX:-ClassUnloading", "-XX:+ClassUnloadingWithConcurrentMark", "-XX:ShenandoahUnloadClassesFrequency=1");
|
110 analyzer.shouldContain("All good");
111 } else {
112 analyzer.shouldHaveExitValue(1);
113 analyzer.shouldContain("java.lang.OutOfMemoryError");
114 analyzer.shouldNotContain("All good");
115 }
116 }
117
118 public static void main(String[] args) throws Exception {
119 if (args.length > 0) {
120 String classDir = TestClassLoaderLeak.class.getProtectionDomain().getCodeSource().getLocation().getPath();
121 for (int c = 0; c < COUNT; c++) {
122 load(classDir);
123 }
124 System.out.println("All good");
125 return;
126 }
127
128 String[][][] modeHeuristics = new String[][][] {
129 {{"normal"}, {"adaptive", "compact", "static", "aggressive"}},
130 {{"iu"}, {"adaptive", "aggressive"}},
131 {{"passive"}, {"passive"}}
132 };
133
134 for (String[][] mh : modeHeuristics) {
135 String mode = mh[0][0];
136 String[] heuristics = mh[1];
137 for (String h : heuristics) {
138 // Forceful enabling should work
139 passWith("-XX:ShenandoahGCMode=" + mode, "-XX:ShenandoahGCHeuristics=" + h, "-XX:+ClassUnloading");
140 passWith("-XX:ShenandoahGCMode=" + mode, "-XX:ShenandoahGCHeuristics=" + h, "-XX:+ClassUnloadingWithConcurrentMark");
141
142 // Even when concurrent unloading is disabled, Full GC has to recover
143 passWith("-XX:ShenandoahGCMode=" + mode, "-XX:ShenandoahGCHeuristics=" + h, "-XX:+ClassUnloading", "-XX:-ClassUnloadingWithConcurrentMark");
144 passWith("-XX:ShenandoahGCMode=" + mode, "-XX:ShenandoahGCHeuristics=" + h, "-XX:+ClassUnloading", "-XX:-ClassUnloadingWithConcurrentMark", "-XX:ShenandoahUnloadClassesFrequency=0");
145 passWith("-XX:ShenandoahGCMode=" + mode, "-XX:ShenandoahGCHeuristics=" + h, "-XX:+ClassUnloading", "-XX:+ClassUnloadingWithConcurrentMark", "-XX:ShenandoahUnloadClassesFrequency=0");
146
147 // Should OOME when unloading forcefully disabled, even if local flags try to enable it back
148 failWith("-XX:ShenandoahGCMode=" + mode, "-XX:ShenandoahGCHeuristics=" + h, "-XX:-ClassUnloading");
149 failWith("-XX:ShenandoahGCMode=" + mode, "-XX:ShenandoahGCHeuristics=" + h, "-XX:-ClassUnloading", "-XX:+ClassUnloadingWithConcurrentMark");
150 failWith("-XX:ShenandoahGCMode=" + mode, "-XX:ShenandoahGCHeuristics=" + h, "-XX:-ClassUnloading", "-XX:+ClassUnloadingWithConcurrentMark", "-XX:ShenandoahUnloadClassesFrequency=1");
|