< 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 >