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