提交 6ca2973a 编写于 作者: S stefank

7196801: NPG: Fix java/lang/management/MemoryMXBean/LowMemoryTest2

Reviewed-by: coleenp, sla
Contributed-by: stefan.karlsson@oracle.com, coleen.phillimore@oracle.com
上级 22468b4a
......@@ -26,7 +26,7 @@
*
* The test set a listener to be notified when any of the non-heap pools
* exceed 80%. It then starts a thread that continuously loads classes.
* In the HotSpot implementation this causes perm space to be consumed.
* In the HotSpot implementation this causes metaspace to be consumed.
* Test completes when we the notification is received or an OutOfMemory
* is generated.
*/
......@@ -100,7 +100,14 @@ public class LowMemoryTest2 {
// TestNNNNNN
String name = "Test" + Integer.toString(count++);
int load_count = count++;
if (load_count > 999999) {
// The test will create a corrupt class file if the count
// exceeds 999999. Fix the test if this exception is thrown.
throw new RuntimeException("Load count exceeded");
}
String name = "Test" + Integer.toString(load_count);
byte value[];
try {
......@@ -133,8 +140,9 @@ public class LowMemoryTest2 {
* Note: Once the usage threshold has been exceeded the low memory
* detector thread will attempt to deliver its notification - this can
* potentially create a race condition with this thread contining to
* fill up perm space. To avoid the low memory detector getting an OutOfMemory
* we throttle this thread once the threshold has been exceeded.
* fill up metaspace. To avoid the low memory detector getting an
* OutOfMemory we throttle this thread once the threshold has been
* exceeded.
*/
public void run() {
List pools = ManagementFactory.getMemoryPoolMXBeans();
......@@ -180,7 +188,7 @@ public class LowMemoryTest2 {
// Set threshold of 80% of all NON_HEAP memory pools
// In the Hotspot implementation this means we should get a notification
// if the CodeCache or perm generation fills up.
// if the CodeCache or metaspace fills up.
while (iter.hasNext()) {
MemoryPoolMXBean p = (MemoryPoolMXBean) iter.next();
......@@ -188,7 +196,12 @@ public class LowMemoryTest2 {
// set threshold
MemoryUsage mu = p.getUsage();
long threshold = (mu.getMax() * 80) / 100;
long max = mu.getMax();
if (max < 0) {
throw new RuntimeException("There is no maximum set for "
+ p.getName() + " memory pool so the test is invalid");
}
long threshold = (max * 80) / 100;
p.setUsageThreshold(threshold);
......
......@@ -51,14 +51,17 @@ go() {
# Run test with each GC configuration
#
# Notes: To ensure that perm gen fills up we disable class unloading.
# Also we set the max perm space to 8MB - otherwise the test takes too
# Notes: To ensure that metaspace fills up we disable class unloading.
# Also we set the max metaspace to 8MB - otherwise the test takes too
# long to run.
go -noclassgc -XX:PermSize=8m -XX:MaxPermSize=8m -XX:+UseSerialGC LowMemoryTest2
go -noclassgc -XX:PermSize=8m -XX:MaxPermSize=8m -XX:+UseParallelGC LowMemoryTest2
go -noclassgc -XX:PermSize=8m -XX:MaxPermSize=8m -XX:+UseParNewGC -XX:+UseConcMarkSweepGC \
LowMemoryTest2
go -noclassgc -XX:MaxMetaspaceSize=16m -XX:+UseSerialGC LowMemoryTest2
go -noclassgc -XX:MaxMetaspaceSize=16m -XX:+UseParallelGC LowMemoryTest2
go -noclassgc -XX:MaxMetaspaceSize=16m -XX:+UseParNewGC -XX:+UseConcMarkSweepGC LowMemoryTest2
# Test class metaspace - might hit MaxMetaspaceSize instead if
# UseCompressedClassPointers is off or if 32 bit.
go -noclassgc -XX:MaxMetaspaceSize=16m -XX:CompressedClassSpaceSize=4m LowMemoryTest2
echo ''
if [ $failures -gt 0 ];
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册