< prev index next >

test/hotspot/jtreg/gc/g1/mixedgc/TestOldGenCollectionUsage.java

Print this page

        

*** 31,41 **** * @library /test/lib * @modules java.base/jdk.internal.misc * @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 */ import jdk.test.lib.Asserts; import sun.hotspot.WhiteBox; --- 31,42 ---- * @library /test/lib * @modules java.base/jdk.internal.misc * @modules java.management * @build sun.hotspot.WhiteBox * @run driver ClassFileInstaller sun.hotspot.WhiteBox ! * @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; import sun.hotspot.WhiteBox;
*** 48,71 **** // 8195115 says that for the "G1 Old Gen" MemoryPool, CollectionUsage.used // is zero for G1 after a mixed collection, which is incorrect. public class TestOldGenCollectionUsage { ! private String poolName = "G1 Old Gen"; ! private String collectorName = "G1 Young Generation"; public static void main(String [] args) throws Exception { TestOldGenCollectionUsage t = new TestOldGenCollectionUsage(); t.run(); } public TestOldGenCollectionUsage() { ! System.out.println("Monitor G1 Old Gen pool with G1 Young Generation collector."); } public void run() { ! // Find memory pool and collector List<MemoryPoolMXBean> pools = ManagementFactory.getMemoryPoolMXBeans(); MemoryPoolMXBean pool = null; boolean foundPool = false; for (int i = 0; i < pools.size(); i++) { pool = pools.get(i); --- 49,86 ---- // 8195115 says that for the "G1 Old Gen" MemoryPool, CollectionUsage.used // is zero for G1 after a mixed collection, which is incorrect. public class TestOldGenCollectionUsage { ! private String poolName; ! private String youngCollectorName; ! private String mixedCollectorName; ! private boolean useLegacyMonitoring; public static void main(String [] args) throws Exception { TestOldGenCollectionUsage t = new TestOldGenCollectionUsage(); t.run(); } public TestOldGenCollectionUsage() { ! 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 old space memory pool and collectors List<MemoryPoolMXBean> pools = ManagementFactory.getMemoryPoolMXBeans(); MemoryPoolMXBean pool = null; boolean foundPool = false; for (int i = 0; i < pools.size(); i++) { pool = pools.get(i);
*** 79,146 **** if (!foundPool) { throw new RuntimeException(poolName + " not found, test with -XX:+UseG1GC"); } List<GarbageCollectorMXBean> collectors = ManagementFactory.getGarbageCollectorMXBeans(); ! GarbageCollectorMXBean collector = null; ! boolean foundCollector = false; for (int i = 0; i < collectors.size(); i++) { ! collector = collectors.get(i); String name = collector.getName(); ! if (name.contains(collectorName)) { ! System.out.println("Found collector: " + name); ! foundCollector = true; ! break; } } ! if (!foundCollector) { ! throw new RuntimeException(collectorName + " not found, test with -XX:+UseG1GC"); } MixedGCProvoker gcProvoker = new MixedGCProvoker(); gcProvoker.allocateOldObjects(); ! // Verify no non-zero result was stored 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"); } ! if (collectionTime <= 0) { ! throw new RuntimeException("Collector has not run"); } gcProvoker.provokeMixedGC(); usage = pool.getCollectionUsage().getUsed(); System.out.println(poolName + ": usage after GC = " + usage); if (usage <= 0) { throw new RuntimeException(poolName + " found with zero usage"); } ! long newCollectionCount = collector.getCollectionCount(); ! System.out.println(collectorName + ": collection count = " + newCollectionCount); ! long newCollectionTime = collector.getCollectionTime(); ! System.out.println(collectorName + ": collection time = " + newCollectionTime); ! if (newCollectionCount <= collectionCount) { throw new RuntimeException("No new collection"); } ! if (newCollectionTime <= collectionTime) { ! throw new RuntimeException("Collector has not run some more"); } System.out.println("Test passed."); } --- 94,174 ---- if (!foundPool) { throw new RuntimeException(poolName + " not found, test with -XX:+UseG1GC"); } List<GarbageCollectorMXBean> collectors = ManagementFactory.getGarbageCollectorMXBeans(); ! GarbageCollectorMXBean youngCollector = null; ! GarbageCollectorMXBean mixedCollector = null; for (int i = 0; i < collectors.size(); i++) { ! GarbageCollectorMXBean collector = collectors.get(i); String name = collector.getName(); ! 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 (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 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 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 (youngCollectionTime <= 0) { ! throw new RuntimeException("Young collector did not run"); } + // Force promotion gcProvoker.provokeMixedGC(); usage = pool.getCollectionUsage().getUsed(); System.out.println(poolName + ": usage after GC = " + usage); if (usage <= 0) { throw new RuntimeException(poolName + " found with zero usage"); } ! long newCollectionCount = mixedCollector.getCollectionCount(); ! System.out.println(mixedCollectorName + ": collection count = " + newCollectionCount); ! long newCollectionTime = mixedCollector.getCollectionTime(); ! System.out.println(mixedCollectorName + ": collection time = " + newCollectionTime); ! 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."); }
< prev index next >