< prev index next >
test/gc/metaspace/TestMetaspacePerfCounters.java
Print this page
rev 11781 : 8163413: gc/metaspace/TestMetaspacePerfCounters failure
Reviewed-by:
@@ -19,25 +19,27 @@
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
* or visit www.oracle.com if you need additional information or have any
* questions.
*/
+import java.lang.management.GarbageCollectorMXBean;
import java.util.List;
import java.util.ArrayList;
-
import jdk.test.lib.*;
+import sun.management.ManagementFactoryHelper;
+
import static jdk.test.lib.Asserts.*;
/* @test TestMetaspacePerfCounters
* @bug 8014659
* @requires vm.gc=="null"
* @library /testlibrary
* @summary Tests that performance counters for metaspace and compressed class
* space exists and works.
* @modules java.base/jdk.internal.misc
* java.compiler
- * java.management
+ * java.management/sun.management
* jdk.jvmstat/sun.jvmstat.monitor
* @run main/othervm -XX:+IgnoreUnrecognizedVMOptions -XX:-UseCompressedOops -XX:-UseCompressedClassPointers -XX:+UsePerfData -XX:+UseSerialGC TestMetaspacePerfCounters
* @run main/othervm -XX:+IgnoreUnrecognizedVMOptions -XX:-UseCompressedOops -XX:-UseCompressedClassPointers -XX:+UsePerfData -XX:+UseParallelGC -XX:+UseParallelOldGC TestMetaspacePerfCounters
* @run main/othervm -XX:+IgnoreUnrecognizedVMOptions -XX:-UseCompressedOops -XX:-UseCompressedClassPointers -XX:+UsePerfData -XX:+UseG1GC TestMetaspacePerfCounters
*
@@ -46,10 +48,11 @@
* @run main/othervm -XX:+IgnoreUnrecognizedVMOptions -XX:+UseCompressedOops -XX:+UseCompressedClassPointers -XX:+UsePerfData -XX:+UseG1GC TestMetaspacePerfCounters
*/
public class TestMetaspacePerfCounters {
public static Class fooClass = null;
private static final String[] counterNames = {"minCapacity", "maxCapacity", "capacity", "used"};
+ private static final List<GarbageCollectorMXBean> gcBeans = ManagementFactoryHelper.getGarbageCollectorMXBeans();
public static void main(String[] args) throws Exception {
String metaspace = "sun.gc.metaspace";
String ccs = "sun.gc.compressedclassspace";
@@ -63,14 +66,31 @@
checkUsedIncreasesWhenLoadingClass(metaspace);
}
}
private static void checkPerfCounters(String ns) throws Exception {
- long minCapacity = getMinCapacity(ns);
- long maxCapacity = getMaxCapacity(ns);
- long capacity = getCapacity(ns);
- long used = getUsed(ns);
+ long gcCountBefore;
+ long gcCountAfter;
+ long minCapacity;
+ long maxCapacity;
+ long capacity;
+ long used;
+
+ // The perf counter values are updated during GC and to be able to
+ // do the assertions below we need to ensure that the values are from
+ // the same GC cycle.
+ do {
+ gcCountBefore = currentGCCount();
+
+ minCapacity = getMinCapacity(ns);
+ maxCapacity = getMaxCapacity(ns);
+ capacity = getCapacity(ns);
+ used = getUsed(ns);
+
+ gcCountAfter = currentGCCount();
+ assertGTE(gcCountAfter, gcCountBefore);
+ } while(gcCountAfter > gcCountBefore);
assertGTE(minCapacity, 0L);
assertGTE(used, minCapacity);
assertGTE(capacity, used);
assertGTE(maxCapacity, capacity);
@@ -125,6 +145,14 @@
}
private static long getUsed(String ns) throws Exception {
return PerfCounters.findByName(ns + ".used").longValue();
}
+
+ private static long currentGCCount() {
+ long gcCount = 0;
+ for (GarbageCollectorMXBean bean : gcBeans) {
+ gcCount += bean.getCollectionCount();
+ }
+ return gcCount;
+ }
}
< prev index next >