# HG changeset patch # User kzhaldyb # Date 1465920927 -10800 # Node ID 86907793a181d58e3c7e19a67939968b7fb4f7dc # Parent f3f298ae1023969907e1bfaacafa7e0be6fd7a6a 8132713: Add tests which check that Humongous objects behave as expected after finishing ConcMark Cycle Reviewed-by: tschatzl, dfazunen diff -r f3f298ae1023 -r 86907793a181 hotspot/test/gc/g1/humongousObjects/objectGraphTest/GC.java --- a/hotspot/test/gc/g1/humongousObjects/objectGraphTest/GC.java Wed Jun 08 13:24:36 2016 +0200 +++ b/hotspot/test/gc/g1/humongousObjects/objectGraphTest/GC.java Tue Jun 14 19:15:27 2016 +0300 @@ -38,6 +38,61 @@ * referenced objects after GCs */ public enum GC { + CMC { + @Override + public Runnable get() { + return () -> { + Helpers.waitTillCMCFinished(WHITE_BOX, 0); + WHITE_BOX.g1StartConcMarkCycle(); + Helpers.waitTillCMCFinished(WHITE_BOX, 0); + }; + } + + public Consumer> getChecker() { + return getCheckerImpl(false, false, true, false); + } + + @Override + public List shouldContain() { + return Arrays.asList(GCTokens.WB_INITIATED_CMC); + } + + @Override + public List shouldNotContain() { + return Arrays.asList(GCTokens.WB_INITIATED_YOUNG_GC, GCTokens.WB_INITIATED_MIXED_GC, + GCTokens.FULL_GC, GCTokens.YOUNG_GC); + } + }, + + CMC_NO_SURV_ROOTS { + @Override + public Runnable get() { + return () -> { + WHITE_BOX.youngGC(); + Helpers.waitTillCMCFinished(WHITE_BOX, 0); + WHITE_BOX.youngGC(); + Helpers.waitTillCMCFinished(WHITE_BOX, 0); + + WHITE_BOX.g1StartConcMarkCycle(); + Helpers.waitTillCMCFinished(WHITE_BOX, 0); + }; + } + + public Consumer> getChecker() { + return getCheckerImpl(true, false, true, false); + } + + @Override + public List shouldContain() { + return Arrays.asList(GCTokens.WB_INITIATED_CMC); + } + + @Override + public List shouldNotContain() { + return Arrays.asList(GCTokens.WB_INITIATED_MIXED_GC, + GCTokens.FULL_GC, GCTokens.YOUNG_GC); + } + }, YOUNG_GC { @Override @@ -60,6 +115,7 @@ GCTokens.CMC, GCTokens.YOUNG_GC); } }, + FULL_GC { @Override public Runnable get() { diff -r f3f298ae1023 -r 86907793a181 hotspot/test/gc/g1/humongousObjects/objectGraphTest/README --- a/hotspot/test/gc/g1/humongousObjects/objectGraphTest/README Wed Jun 08 13:24:36 2016 +0200 +++ b/hotspot/test/gc/g1/humongousObjects/objectGraphTest/README Tue Jun 14 19:15:27 2016 +0300 @@ -31,6 +31,13 @@ 3. Full GC with memory pressure - weakly and softly referenced non-humongous and humongous objects are collected. +4. CMC - weakly referenced non-humongous objects are collected, other objects are not collected since weak references + from Young Gen is handled as strong during CMC. + +5. CMC_NO_SURV_ROOTS - weakly referenced non-humongous and humongous objects are collected, softly referenced + non-humongous and humongous objects are not collected since we make 2 Young GC to promote all + weak references to Old Gen. + The test gets gc type as a command line argument. Then the test allocates object graph in heap (currently testing scenarios are pre-generated and stored in TestcaseData.getPregeneratedTestcases()) with TestObjectGraphAfterGC::allocateObjectGraph. diff -r f3f298ae1023 -r 86907793a181 hotspot/test/gc/g1/humongousObjects/objectGraphTest/TestObjectGraphAfterGC.java --- a/hotspot/test/gc/g1/humongousObjects/objectGraphTest/TestObjectGraphAfterGC.java Wed Jun 08 13:24:36 2016 +0200 +++ b/hotspot/test/gc/g1/humongousObjects/objectGraphTest/TestObjectGraphAfterGC.java Tue Jun 14 19:15:27 2016 +0300 @@ -77,6 +77,14 @@ * -XX:G1HeapRegionSize=1M -Xlog:gc=info:file=TestObjectGraphAfterGC_FULL_GC_MEMORY_PRESSURE.gc.log * gc.g1.humongousObjects.objectGraphTest.TestObjectGraphAfterGC FULL_GC_MEMORY_PRESSURE * + * @run main/othervm -Xms200M -XX:+UseG1GC -XX:+UnlockDiagnosticVMOptions -XX:+WhiteBoxAPI -Xbootclasspath/a:. + * -XX:G1HeapRegionSize=1M -Xlog:gc=info:file=TestObjectGraphAfterGC_CMC.gc.log -XX:MaxTenuringThreshold=16 + * gc.g1.humongousObjects.objectGraphTest.TestObjectGraphAfterGC CMC + * + * @run main/othervm -Xms200M -XX:+UseG1GC -XX:+UnlockDiagnosticVMOptions -XX:+WhiteBoxAPI -Xbootclasspath/a:. + * -XX:G1HeapRegionSize=1M -Xlog:gc=info:file=TestObjectGraphAfterGC_CMC_NO_SURV_ROOTS.gc.log -XX:MaxTenuringThreshold=1 + * gc.g1.humongousObjects.objectGraphTest.TestObjectGraphAfterGC CMC_NO_SURV_ROOTS + * */ /**