test/gc/class_unloading/TestCMSClassUnloadingEnabledHWM.java
Print this page
@@ -24,82 +24,67 @@
/*
* @test
* @key gc
* @bug 8049831
* @library /testlibrary /testlibrary/whitebox
- * @build TestCMSClassUnloadingDisabledHWM
+ * @build TestCMSClassUnloadingEnabledHWM AllocateBeyondMetaspaceSize
* @run main ClassFileInstaller sun.hotspot.WhiteBox
- * @run driver TestCMSClassUnloadingDisabledHWM
+ * @run driver TestCMSClassUnloadingEnabledHWM
* @summary Test that -XX:-CMSClassUnloadingEnabled will trigger a Full GC when more than MetaspaceSize metadata is allocated.
*/
import com.oracle.java.testlibrary.OutputAnalyzer;
import com.oracle.java.testlibrary.ProcessTools;
-import sun.hotspot.WhiteBox;
import java.util.ArrayList;
import java.util.Arrays;
-public class TestCMSClassUnloadingDisabledHWM {
+public class TestCMSClassUnloadingEnabledHWM {
+ private static long MetaspaceSize = 32 * 1024 * 1024;
+ private static long YoungGenSize = 32 * 1024 * 1024;
- private static OutputAnalyzer run(long metaspaceSize, long youngGenSize) throws Exception {
+ private static OutputAnalyzer run(boolean enableUnloading) throws Exception {
ProcessBuilder pb = ProcessTools.createJavaProcessBuilder(
"-Xbootclasspath/a:.",
"-XX:+WhiteBoxAPI",
- "-XX:MetaspaceSize=" + metaspaceSize,
- "-Xmn" + youngGenSize,
+ "-XX:MetaspaceSize=" + MetaspaceSize,
+ "-Xmn" + YoungGenSize,
"-XX:+UseConcMarkSweepGC",
- "-XX:-CMSClassUnloadingEnabled",
+ "-XX:" + (enableUnloading ? "+" : "-") + "CMSClassUnloadingEnabled",
"-XX:+PrintHeapAtGC",
"-XX:+PrintGCDetails",
"AllocateBeyondMetaspaceSize",
- "" + metaspaceSize,
- "" + youngGenSize);
+ "" + MetaspaceSize,
+ "" + YoungGenSize);
return new OutputAnalyzer(pb.start());
}
- public static void main(String args[]) throws Exception {
- long metaspaceSize = 32 * 1024 * 1024;
- long youngGenSize = 32 * 1024 * 1024;
-
- OutputAnalyzer out = run(metaspaceSize, youngGenSize);
-
- // -XX:-CMSClassUnloadingEnabled is used, so we expect a full GC instead of a concurrent cycle.
- out.shouldMatch(".*Full GC.*");
- out.shouldNotMatch(".*CMS Initial Mark.*");
+ public static OutputAnalyzer runWithCMSClassUnloading() throws Exception {
+ return run(true);
}
-}
-class AllocateBeyondMetaspaceSize {
- public static Object dummy;
-
- public static void main(String [] args) {
- if (args.length != 2) {
- throw new IllegalArgumentException("Usage: <MetaspaceSize> <YoungGenSize>");
+ public static OutputAnalyzer runWithoutCMSClassUnloading() throws Exception {
+ return run(false);
}
- long metaspaceSize = Long.parseLong(args[0]);
- long youngGenSize = Long.parseLong(args[1]);
+ public static void testWithoutCMSClassUnloading() throws Exception {
+ // -XX:-CMSClassUnloadingEnabled is used, so we expect a full GC instead of a concurrent cycle.
+ OutputAnalyzer out = runWithoutCMSClassUnloading();
- run(metaspaceSize, youngGenSize);
+ out.shouldMatch(".*Full GC.*");
+ out.shouldNotMatch(".*CMS Initial Mark.*");
}
- private static void run(long metaspaceSize, long youngGenSize) {
- WhiteBox wb = WhiteBox.getWhiteBox();
-
- long allocationBeyondMetaspaceSize = metaspaceSize * 2;
- long metaspace = wb.allocateMetaspace(null, allocationBeyondMetaspaceSize);
-
- triggerYoungGC(youngGenSize);
+ public static void testWithCMSClassUnloading() throws Exception {
+ // -XX:+CMSClassUnloadingEnabled is used, so we expect a concurrent cycle instead of a full GC.
+ OutputAnalyzer out = runWithCMSClassUnloading();
- wb.freeMetaspace(null, metaspace, metaspace);
+ out.shouldMatch(".*CMS Initial Mark.*");
+ out.shouldNotMatch(".*Full GC.*");
}
- private static void triggerYoungGC(long youngGenSize) {
- long approxAllocSize = 32 * 1024;
- long numAllocations = 2 * youngGenSize / approxAllocSize;
-
- for (long i = 0; i < numAllocations; i++) {
- dummy = new byte[(int)approxAllocSize];
- }
+ public static void main(String args[]) throws Exception {
+ testWithCMSClassUnloading();
+ testWithoutCMSClassUnloading();
}
}
+