< prev index next >
test/jdk/java/lang/management/MemoryMXBean/LowMemoryTest.java
Print this page
@@ -81,13 +81,17 @@
final String g1Flag = "-XX:G1HeapRegionSize=1m";
// Runs the test collecting subprocess I/O while it's running.
traceTest(classMain + ", -XX:+UseSerialGC", nmFlag, lpFlag, "-XX:+UseSerialGC");
traceTest(classMain + ", -XX:+UseParallelGC", nmFlag, lpFlag, "-XX:+UseParallelGC");
- traceTest(classMain + ", -XX:+UseG1GC", nmFlag, lpFlag, "-XX:+UseG1GC", g1Flag);
+ traceTest(classMain + ", -XX:+UseG1GC -XX:-G1UseLegacyMonitoring", nmFlag, lpFlag,
+ "-XX:+UseG1GC", "-XX:-G1UseLegacyMonitoring", g1Flag);
+ traceTest(classMain + ", -XX:+UseG1GC -XX:+G1UseLegacyMonitoring", nmFlag, lpFlag,
+ "-XX:+UseG1GC", "-XX:+G1UseLegacyMonitoring", g1Flag);
if (!Compiler.isGraalEnabled()) { // Graal does not support CMS
- traceTest(classMain + ", -XX:+UseConcMarkSweepGC", nmFlag, lpFlag, "-XX:+UseConcMarkSweepGC");
+ traceTest(classMain + ", -XX:+UseConcMarkSweepGC", nmFlag, lpFlag,
+ "-XX:+UseConcMarkSweepGC");
}
}
/*
* Creating command-line for running subprocess JVM:
@@ -230,21 +234,43 @@
// Find the Old generation which supports low memory detection
ListIterator iter = pools.listIterator();
while (iter.hasNext()) {
MemoryPoolMXBean p = (MemoryPoolMXBean) iter.next();
+ // Only check heap pools that support a usage threshold.
+ // This is typically only the old generation space
+ // since the other spaces are expected to get filled up.
if (p.getType() == MemoryType.HEAP &&
p.isUsageThresholdSupported()) {
+ // In all collectors except G1, only the old generation supports a
+ // usage threshold. The G1 legacy mode "G1 Old Gen" also does. In
+ // G1 default mode, both the old space ("G1 Old Space": it's not
+ // really a generation in the non-G1 collector sense) and the
+ // humongous space ("G1 Humongous Space"), support a usage threshold.
+ // So, the following condition is true for all non-G1 old generations,
+ // for the G1 legacy old gen, and for the G1 default humongous space.
+ // It is not true for the G1 default old gen.
+ //
+ // We're allocating humongous objects in this test, so the G1 default
+ // mode "G1 Old Space" occupancy doesn't change, because humongous
+ // objects are allocated in the "G1 Humongous Space". If we allowed
+ // the G1 default mode "G1 Old Space", notification would never
+ // happen because no objects are allocated there.
+ if (!p.getName().equals("G1 Old Space")) {
mpool = p;
if (trace) {
System.out.println("Selected memory pool for low memory " +
"detection.");
MemoryUtil.printMemoryPool(mpool);
}
break;
}
}
+ }
+ if (mpool == null) {
+ throw new RuntimeException("TEST FAILED: No heap pool found");
+ }
TestListener listener = new TestListener();
SensorListener l2 = new SensorListener();
NotificationEmitter emitter = (NotificationEmitter) mm;
emitter.addNotificationListener(listener, null, null);
< prev index next >