提交 12f0c4ef 编写于 作者: M mgerdin

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
上级 cd1a7482
...@@ -48,7 +48,7 @@ public class CollectionUsageThreshold { ...@@ -48,7 +48,7 @@ public class CollectionUsageThreshold {
private static Map<String, PoolRecord> result = new HashMap<>(); private static Map<String, PoolRecord> result = new HashMap<>();
private static boolean trace = false; private static boolean trace = false;
private static boolean testFailed = 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 NUM_GCS = 3;
private static final int THRESHOLD = 10; private static final int THRESHOLD = 10;
private static Checker checker; private static Checker checker;
...@@ -129,14 +129,19 @@ public class CollectionUsageThreshold { ...@@ -129,14 +129,19 @@ public class CollectionUsageThreshold {
for (MemoryPoolMXBean p : pools) { for (MemoryPoolMXBean p : pools) {
MemoryUsage u = p.getUsage(); MemoryUsage u = p.getUsage();
if (p.isUsageThresholdSupported() && p.isCollectionUsageThresholdSupported()) { 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); PoolRecord pr = new PoolRecord(p);
result.put(p.getName(), pr); result.put(p.getName(), pr);
if (result.size() == EXPECTED_NUM_POOLS) { if (result.size() == numMemoryPools) {
break; break;
} }
} }
} }
if (result.size() != EXPECTED_NUM_POOLS) { if (result.size() != numMemoryPools) {
throw new RuntimeException("Unexpected number of selected pools"); throw new RuntimeException("Unexpected number of selected pools");
} }
...@@ -209,7 +214,7 @@ public class CollectionUsageThreshold { ...@@ -209,7 +214,7 @@ public class CollectionUsageThreshold {
public void run() { public void run() {
while (true) { while (true) {
try { try {
signals.acquire(EXPECTED_NUM_POOLS); signals.acquire(numMemoryPools);
checkResult(); checkResult();
} catch (InterruptedException e) { } catch (InterruptedException e) {
throw new RuntimeException(e); throw new RuntimeException(e);
......
...@@ -58,8 +58,11 @@ public class MemoryTest { ...@@ -58,8 +58,11 @@ public class MemoryTest {
// They are: Copy/Scavenger + MSC + CodeCache manager // They are: Copy/Scavenger + MSC + CodeCache manager
// (or equivalent for other collectors) // (or equivalent for other collectors)
// Number of GC memory managers = 2 // 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 expectedNumGCMgrs = 2;
private static int expectedNumMgrs = expectedNumGCMgrs + 1; private static int expectedNumMgrs = expectedNumGCMgrs + 1;
private static String[] types = { "heap", "non-heap" }; private static String[] types = { "heap", "non-heap" };
...@@ -80,6 +83,7 @@ public class MemoryTest { ...@@ -80,6 +83,7 @@ public class MemoryTest {
private static void checkMemoryPools() throws Exception { private static void checkMemoryPools() throws Exception {
List pools = ManagementFactory.getMemoryPoolMXBeans(); List pools = ManagementFactory.getMemoryPoolMXBeans();
boolean hasPerm = false;
int[] numPools = new int[NUM_TYPES]; int[] numPools = new int[NUM_TYPES];
for (ListIterator iter = pools.listIterator(); iter.hasNext();) { for (ListIterator iter = pools.listIterator(); iter.hasNext();) {
...@@ -90,6 +94,16 @@ public class MemoryTest { ...@@ -90,6 +94,16 @@ public class MemoryTest {
if (pool.getType() == MemoryType.NON_HEAP) { if (pool.getType() == MemoryType.NON_HEAP) {
numPools[NONHEAP]++; 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 // Check the number of Memory pools
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册