test/java/lang/management/MemoryMXBean/CollectionUsageThreshold.java

Print this page
rev 5700 : 7195557: NPG: Unexpected number of memory pools
Summary: Update management tests to work with a VM without a permanent generation memory pool
Reviewed-by:

@@ -46,11 +46,11 @@
     private static List<MemoryPoolMXBean> pools = ManagementFactory.getMemoryPoolMXBeans();
     private static List<MemoryManagerMXBean> managers = ManagementFactory.getMemoryManagerMXBeans();
     private static Map<String, PoolRecord> result = new HashMap<>();
     private static boolean trace = false;
     private static boolean testFailed = false;
-    private static final int EXPECTED_NUM_POOLS = 2;
+    private static int numMemoryPools = 1;
     private static final int NUM_GCS = 3;
     private static final int THRESHOLD = 10;
     private static Checker checker;
     private static int numGCs = 0;
 

@@ -127,18 +127,23 @@
 
         // Find the Old generation which supports low memory detection
         for (MemoryPoolMXBean p : pools) {
             MemoryUsage u = p.getUsage();
             if (p.isUsageThresholdSupported() && p.isCollectionUsageThresholdSupported()) {
+                if (p.getName().toLowerCase().contains("perm")) {
+                    // if we have a "perm gen" pool increase the number of expected
+                    // memory pools by one.
+                    numMemoryPools++;
+                }
                 PoolRecord pr = new PoolRecord(p);
                 result.put(p.getName(), pr);
-                if (result.size() == EXPECTED_NUM_POOLS) {
+                if (result.size() == numMemoryPools) {
                     break;
                 }
             }
         }
-        if (result.size() != EXPECTED_NUM_POOLS) {
+        if (result.size() != numMemoryPools) {
             throw new RuntimeException("Unexpected number of selected pools");
         }
 
         try {
             // This test creates a checker thread responsible for checking

@@ -207,11 +212,11 @@
             super(name);
         };
         public void run() {
             while (true) {
                 try {
-                    signals.acquire(EXPECTED_NUM_POOLS);
+                    signals.acquire(numMemoryPools);
                     checkResult();
                 } catch (InterruptedException e) {
                     throw new RuntimeException(e);
                 } catch (BrokenBarrierException e) {
                     throw new RuntimeException(e);