< prev index next >

test/hotspot/jtreg/gc/g1/TestVerifyGCType.java

Print this page
rev 48154 : 8192983: gc/g1/TestVerifyGCType.java might fail on loaded machines
Reviewed-by:

*** 140,151 **** Collections.addAll(basicOpts, new String[] { "-Xbootclasspath/a:.", "-XX:+UnlockDiagnosticVMOptions", "-XX:+UseG1GC", "-XX:+WhiteBoxAPI", - "-XX:+ExplicitGCInvokesConcurrent", "-Xlog:gc,gc+start,gc+verify=info", "-XX:+VerifyBeforeGC", "-XX:+VerifyAfterGC", "-XX:+VerifyDuringGC"}); for(String verifyType : types) { --- 140,152 ---- Collections.addAll(basicOpts, new String[] { "-Xbootclasspath/a:.", "-XX:+UnlockDiagnosticVMOptions", "-XX:+UseG1GC", "-XX:+WhiteBoxAPI", "-Xlog:gc,gc+start,gc+verify=info", + "-Xms16m", + "-Xmx16m", "-XX:+VerifyBeforeGC", "-XX:+VerifyAfterGC", "-XX:+VerifyDuringGC"}); for(String verifyType : types) {
*** 171,181 **** return analyzer; } private static void verifyCollection(String name, boolean expectBefore, boolean expectDuring, boolean expectAfter, String data) { CollectionInfo ci = CollectionInfo.parseFirst(name, data); ! Asserts.assertTrue(ci != null, "Expected GC not found: " + name); // Verify Before verifyType(ci, expectBefore, VERIFY_BEFORE); // Verify During verifyType(ci, expectDuring, VERIFY_DURING); --- 172,182 ---- return analyzer; } private static void verifyCollection(String name, boolean expectBefore, boolean expectDuring, boolean expectAfter, String data) { CollectionInfo ci = CollectionInfo.parseFirst(name, data); ! Asserts.assertTrue(ci != null, "Expected GC not found: " + name + "\n" + data); // Verify Before verifyType(ci, expectBefore, VERIFY_BEFORE); // Verify During verifyType(ci, expectDuring, VERIFY_DURING);
*** 241,256 **** } public static class TriggerGCs { public static void main(String args[]) throws Exception { WhiteBox wb = WhiteBox.getWhiteBox(); // Trigger the different GCs using the WhiteBox API and System.gc() // to start a concurrent cycle with -XX:+ExplicitGCInvokesConcurrent. wb.fullGC(); // full ! System.gc(); // initial-mark, remark and cleanup // Sleep to make sure concurrent cycle is done Thread.sleep(1000); wb.youngGC(); // young-only wb.youngGC(); // mixed } } } --- 242,285 ---- } public static class TriggerGCs { public static void main(String args[]) throws Exception { WhiteBox wb = WhiteBox.getWhiteBox(); + // Allocate some memory that can be turned into garbage. + Object[] used = alloc1M(); + // Trigger the different GCs using the WhiteBox API and System.gc() // to start a concurrent cycle with -XX:+ExplicitGCInvokesConcurrent. wb.fullGC(); // full ! ! // Memory have been promoted to old by full GC. Free ! // some memory to be reclaimed by concurrent cycle. ! partialFree(used); ! wb.g1StartConcMarkCycle(); // initial-mark, remark and cleanup ! // Sleep to make sure concurrent cycle is done + while (wb.g1InConcurrentMark()) { Thread.sleep(1000); + } + + // Trigger two young GCs, first will be young-only, second will be mixed. wb.youngGC(); // young-only wb.youngGC(); // mixed } + + private static Object[] alloc1M() { + Object[] ret = new Object[1024]; + // Alloc 1024 1k byte arrays (~1M) + for (int i = 0; i < ret.length; i++) { + ret[i] = new byte[1024]; + } + return ret; + } + + private static void partialFree(Object[] array) { + // Free every other element + for (int i = 0; i < array.length; i+=2) { + array[i] = null; + } + } } }
< prev index next >