--- old/test/jdk/java/lang/management/MemoryMXBean/LowMemoryTest.java 2018-10-08 18:33:42.000000000 -0400 +++ new/test/jdk/java/lang/management/MemoryMXBean/LowMemoryTest.java 2018-10-08 18:33:42.000000000 -0400 @@ -83,9 +83,13 @@ // 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"); } } @@ -234,15 +238,29 @@ MemoryPoolMXBean p = (MemoryPoolMXBean) iter.next(); if (p.getType() == MemoryType.HEAP && p.isUsageThresholdSupported()) { - mpool = p; - if (trace) { - System.out.println("Selected memory pool for low memory " + - "detection."); - MemoryUtil.printMemoryPool(mpool); + if (!p.getName().equals("G1 Old Space")) { + // In G1, humongous objects are tracked in the old space only in + // legacy monitoring mode. In default mode, G1 tracks humongous + // objects in the humongous space, which latter also supports a + // usage threshold. Since we're allocating humongous objects in + // this test, in default mode the old space doesn't change. For + // this test, we use the old space in legacy mode (it's called + // "G1 Old Gen" and the humongous space in default mode. If we + // used "G1 Old Space" in default mode, notification would never + // happen. + mpool = p; + if (trace) { + System.out.println("Selected memory pool for low memory " + + "detection."); + MemoryUtil.printMemoryPool(mpool); + } + break; } - break; } } + if (mpool == null) { + throw new RuntimeException("TEST FAILED: No heap pool found"); + } TestListener listener = new TestListener(); SensorListener l2 = new SensorListener();