< prev index next >

test/jdk/java/lang/management/MemoryMXBean/MemoryManagement.java

Print this page

        

@@ -1,7 +1,7 @@
 /*
- * Copyright (c) 2003, 2016, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2003, 2018, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
  * under the terms of the GNU General Public License version 2 only, as
  * published by the Free Software Foundation.

@@ -80,25 +80,39 @@
         if (trace) {
             MemoryUtil.printMemoryPools(pools);
             MemoryUtil.printMemoryManagers(managers);
         }
 
-        // Find the Old generation which supports low memory detection
+        // Find a pool which which supports low memory detection
         ListIterator iter = pools.listIterator();
         while (iter.hasNext()) {
             MemoryPoolMXBean p = (MemoryPoolMXBean) iter.next();
             if (p.getType() == MemoryType.HEAP &&
                 p.isUsageThresholdSupported()) {
+                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;
             }
         }
+        }
+        if (mpool == null) {
+            throw new RuntimeException("TEST FAILED: No heap pool found");
+        }
 
         SensorListener listener = new SensorListener();
         NotificationEmitter emitter = (NotificationEmitter) mm;
         emitter.addNotificationListener(listener, null, null);
 
< prev index next >