7195557: NPG: Unexpected number of memory pools
Summary: Update management tests to work with a VM without a permanent generation memory pool
Reviewed-by: rbackman, brutisso, sla, dholmes
--- a/jdk/test/java/lang/management/MemoryMXBean/CollectionUsageThreshold.java Wed Sep 05 11:38:40 2012 -0700
+++ b/jdk/test/java/lang/management/MemoryMXBean/CollectionUsageThreshold.java Thu Sep 06 14:07:12 2012 +0200
@@ -48,7 +48,7 @@
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;
@@ -129,14 +129,19 @@
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");
}
@@ -209,7 +214,7 @@
public void run() {
while (true) {
try {
- signals.acquire(EXPECTED_NUM_POOLS);
+ signals.acquire(numMemoryPools);
checkResult();
} catch (InterruptedException e) {
throw new RuntimeException(e);
--- a/jdk/test/java/lang/management/MemoryMXBean/MemoryTest.java Wed Sep 05 11:38:40 2012 -0700
+++ b/jdk/test/java/lang/management/MemoryMXBean/MemoryTest.java Thu Sep 06 14:07:12 2012 +0200
@@ -58,8 +58,11 @@
// They are: Copy/Scavenger + MSC + CodeCache manager
// (or equivalent for other collectors)
// Number of GC memory managers = 2
- private static int[] expectedMinNumPools = {3, 2};
- private static int[] expectedMaxNumPools = {3, 4};
+
+ // Hotspot VM 1.8+ after perm gen removal is expected to have only
+ // one non-heap memory pool
+ private static int[] expectedMinNumPools = {3, 1};
+ private static int[] expectedMaxNumPools = {3, 1};
private static int expectedNumGCMgrs = 2;
private static int expectedNumMgrs = expectedNumGCMgrs + 1;
private static String[] types = { "heap", "non-heap" };
@@ -80,6 +83,7 @@
private static void checkMemoryPools() throws Exception {
List pools = ManagementFactory.getMemoryPoolMXBeans();
+ boolean hasPerm = false;
int[] numPools = new int[NUM_TYPES];
for (ListIterator iter = pools.listIterator(); iter.hasNext();) {
@@ -90,6 +94,16 @@
if (pool.getType() == MemoryType.NON_HEAP) {
numPools[NONHEAP]++;
}
+ if (pool.getName().toLowerCase().contains("perm")) {
+ hasPerm = true;
+ }
+ }
+
+ if (hasPerm) {
+ // If the VM has perm gen there will be between 2 and 4 non heap
+ // pools (4 if class data sharing is used)
+ expectedMinNumPools[NONHEAP] = 2;
+ expectedMaxNumPools[NONHEAP] = 4;
}
// Check the number of Memory pools