--- old/test/hotspot/jtreg/gc/g1/mixedgc/TestOldGenCollectionUsage.java 2018-10-18 18:02:10.000000000 -0400 +++ new/test/hotspot/jtreg/gc/g1/mixedgc/TestOldGenCollectionUsage.java 2018-10-18 18:02:10.000000000 -0400 @@ -33,7 +33,8 @@ * @modules java.management * @build sun.hotspot.WhiteBox * @run driver ClassFileInstaller sun.hotspot.WhiteBox - * @run main/othervm -Xbootclasspath/a:. -XX:+UseG1GC -XX:+UnlockExperimentalVMOptions -XX:+UnlockDiagnosticVMOptions -XX:+WhiteBoxAPI -verbose:gc -XX:SurvivorRatio=1 -Xmx14m -Xms14m -XX:MaxTenuringThreshold=1 -XX:InitiatingHeapOccupancyPercent=100 -XX:-G1UseAdaptiveIHOP -XX:G1MixedGCCountTarget=4 -XX:MaxGCPauseMillis=30000 -XX:G1HeapRegionSize=1m -XX:G1HeapWastePercent=0 -XX:G1MixedGCLiveThresholdPercent=100 TestOldGenCollectionUsage + * @run main/othervm -Xbootclasspath/a:. -XX:+UseG1GC -XX:-G1UseLegacyMonitoring -XX:+UnlockExperimentalVMOptions -XX:+UnlockDiagnosticVMOptions -XX:+WhiteBoxAPI -verbose:gc -XX:SurvivorRatio=1 -Xmx12m -Xms12m -XX:MaxTenuringThreshold=1 -XX:InitiatingHeapOccupancyPercent=100 -XX:-G1UseAdaptiveIHOP -XX:G1MixedGCCountTarget=4 -XX:MaxGCPauseMillis=30000 -XX:G1HeapRegionSize=1m -XX:G1HeapWastePercent=0 -XX:G1MixedGCLiveThresholdPercent=100 TestOldGenCollectionUsage + * @run main/othervm -Xbootclasspath/a:. -XX:+UseG1GC -XX:+G1UseLegacyMonitoring -XX:+UnlockExperimentalVMOptions -XX:+UnlockDiagnosticVMOptions -XX:+WhiteBoxAPI -verbose:gc -XX:SurvivorRatio=1 -Xmx12m -Xms12m -XX:MaxTenuringThreshold=1 -XX:InitiatingHeapOccupancyPercent=100 -XX:-G1UseAdaptiveIHOP -XX:G1MixedGCCountTarget=4 -XX:MaxGCPauseMillis=30000 -XX:G1HeapRegionSize=1m -XX:G1HeapWastePercent=0 -XX:G1MixedGCLiveThresholdPercent=100 TestOldGenCollectionUsage */ import jdk.test.lib.Asserts; @@ -50,8 +51,10 @@ public class TestOldGenCollectionUsage { - private String poolName = "G1 Old Gen"; - private String collectorName = "G1 Young Generation"; + private String poolName; + private String youngCollectorName; + private String mixedCollectorName; + private boolean useLegacyMonitoring; public static void main(String [] args) throws Exception { TestOldGenCollectionUsage t = new TestOldGenCollectionUsage(); @@ -59,11 +62,23 @@ } public TestOldGenCollectionUsage() { - System.out.println("Monitor G1 Old Gen pool with G1 Young Generation collector."); + useLegacyMonitoring = LegacyMonitoring.use(); + poolName = useLegacyMonitoring ? "G1 Old Gen" : "G1 Old Space"; + youngCollectorName = useLegacyMonitoring ? "G1 Young Generation" : "G1 Young"; + mixedCollectorName = useLegacyMonitoring ? "G1 Young Generation" : "G1 Mixed"; + System.out.println("Monitor G1 Old Gen pool with " + mixedCollectorName + " collector."); + } + + public static class LegacyMonitoring { + private static final boolean useLegacyMonitoring = getUseLegacyMonitoring(); + private static boolean getUseLegacyMonitoring() { + return ManagementFactory.getRuntimeMXBean().getInputArguments().contains("-XX:+G1UseLegacyMonitoring"); + } + public static boolean use() { return useLegacyMonitoring; } } public void run() { - // Find memory pool and collector + // Find old space memory pool and collectors List pools = ManagementFactory.getMemoryPoolMXBeans(); MemoryPoolMXBean pool = null; boolean foundPool = false; @@ -81,45 +96,52 @@ } List collectors = ManagementFactory.getGarbageCollectorMXBeans(); - GarbageCollectorMXBean collector = null; - boolean foundCollector = false; + GarbageCollectorMXBean youngCollector = null; + GarbageCollectorMXBean mixedCollector = null; for (int i = 0; i < collectors.size(); i++) { - collector = collectors.get(i); + GarbageCollectorMXBean collector = collectors.get(i); String name = collector.getName(); - if (name.contains(collectorName)) { - System.out.println("Found collector: " + name); - foundCollector = true; - break; + if (name.equals(youngCollectorName)) { + System.out.println("Found young collector: " + name); + youngCollector = collector; + } + if (name.equals(mixedCollectorName)) { + System.out.println("Found mixed collector: " + name); + mixedCollector = collector; } } - if (!foundCollector) { - throw new RuntimeException(collectorName + " not found, test with -XX:+UseG1GC"); + if (youngCollector == null) { + throw new RuntimeException(youngCollectorName + " not found, test with -XX:+UseG1GC"); + } + if (mixedCollector == null) { + throw new RuntimeException(mixedCollectorName + " not found, test with -XX:+UseG1GC"); } MixedGCProvoker gcProvoker = new MixedGCProvoker(); gcProvoker.allocateOldObjects(); - // Verify no non-zero result was stored + // Verify no non-zero result was stored for the pool long usage = pool.getCollectionUsage().getUsed(); System.out.println(poolName + ": usage after GC = " + usage); if (usage > 0) { throw new RuntimeException("Premature mixed collections(s)"); } - // Verify that collections were done - long collectionCount = collector.getCollectionCount(); - System.out.println(collectorName + ": collection count = " - + collectionCount); - long collectionTime = collector.getCollectionTime(); - System.out.println(collectorName + ": collection time = " - + collectionTime); - if (collectionCount <= 0) { - throw new RuntimeException("Collection count <= 0"); + // Verify that young collections were done + long youngCollectionCount = youngCollector.getCollectionCount(); + System.out.println(youngCollectorName + ": collection count = " + + youngCollectionCount); + long youngCollectionTime = youngCollector.getCollectionTime(); + System.out.println(youngCollectorName + ": collection time = " + + youngCollectionTime); + if (youngCollectionCount <= 0) { + throw new RuntimeException("Young collection count <= 0"); } - if (collectionTime <= 0) { - throw new RuntimeException("Collector has not run"); + if (youngCollectionTime <= 0) { + throw new RuntimeException("Young collector did not run"); } + // Force promotion gcProvoker.provokeMixedGC(); usage = pool.getCollectionUsage().getUsed(); @@ -128,17 +150,23 @@ throw new RuntimeException(poolName + " found with zero usage"); } - long newCollectionCount = collector.getCollectionCount(); - System.out.println(collectorName + ": collection count = " + long newCollectionCount = mixedCollector.getCollectionCount(); + System.out.println(mixedCollectorName + ": collection count = " + newCollectionCount); - long newCollectionTime = collector.getCollectionTime(); - System.out.println(collectorName + ": collection time = " + long newCollectionTime = mixedCollector.getCollectionTime(); + System.out.println(mixedCollectorName + ": collection time = " + newCollectionTime); - if (newCollectionCount <= collectionCount) { - throw new RuntimeException("No new collection"); - } - if (newCollectionTime <= collectionTime) { - throw new RuntimeException("Collector has not run some more"); + if (useLegacyMonitoring) { + if (newCollectionCount <= youngCollectionCount) { + throw new RuntimeException("No new collection"); + } + } else { + if (newCollectionCount <= 0) { + throw new RuntimeException("Mixed collection count <= 0"); + } + if (newCollectionTime <= 0) { + throw new RuntimeException("Mixed collector did not run"); + } } System.out.println("Test passed.");