27 import com.oracle.java.testlibrary.*; |
27 import com.oracle.java.testlibrary.*; |
28 import static com.oracle.java.testlibrary.Asserts.*; |
28 import static com.oracle.java.testlibrary.Asserts.*; |
29 |
29 |
30 /* @test TestPerfCountersAndMemoryPools |
30 /* @test TestPerfCountersAndMemoryPools |
31 * @bug 8023476 |
31 * @bug 8023476 |
|
32 * @library /testlibrary |
32 * @summary Tests that a MemoryPoolMXBeans and PerfCounters for metaspace |
33 * @summary Tests that a MemoryPoolMXBeans and PerfCounters for metaspace |
33 * report the same data. |
34 * report the same data. |
34 * @run main/othervm -XX:+IgnoreUnrecognizedVMOptions -XX:-UseCompressedOops -XX:-UseCompressedKlassPointers -XX:+UseSerialGC -XX:+UsePerfData TestPerfCountersAndMemoryPools |
35 * @run main/othervm -XX:+IgnoreUnrecognizedVMOptions -XX:-UseCompressedOops -XX:-UseCompressedKlassPointers -XX:+UseSerialGC -XX:+UsePerfData -Xint TestPerfCountersAndMemoryPools |
35 * @run main/othervm -XX:+IgnoreUnrecognizedVMOptions -XX:+UseCompressedOops -XX:+UseCompressedKlassPointers -XX:+UseSerialGC -XX:+UsePerfData TestPerfCountersAndMemoryPools |
36 * @run main/othervm -XX:+IgnoreUnrecognizedVMOptions -XX:+UseCompressedOops -XX:+UseCompressedKlassPointers -XX:+UseSerialGC -XX:+UsePerfData -Xint TestPerfCountersAndMemoryPools |
36 */ |
37 */ |
37 public class TestPerfCountersAndMemoryPools { |
38 public class TestPerfCountersAndMemoryPools { |
38 public static void main(String[] args) throws Exception { |
39 public static void main(String[] args) throws Exception { |
39 checkMemoryUsage("Metaspace", "sun.gc.metaspace"); |
40 checkMemoryUsage("Metaspace", "sun.gc.metaspace"); |
40 |
41 |
41 if (InputArguments.contains("-XX:+UseCompressedKlassPointers") && Platform.is64bit()) { |
42 if (InputArguments.contains("-XX:+UseCompressedKlassPointers") && Platform.is64bit()) { |
42 checkMemoryUsage("Compressed Class Space", "sun.gc.compressedclassspace"); |
43 checkMemoryUsage("Compressed Class Space", "sun.gc.compressedclassspace"); |
43 } |
44 } |
44 } |
45 } |
45 |
46 |
46 private static MemoryUsage getMemoryUsage(String memoryPoolName) { |
47 private static MemoryPoolMXBean getMemoryPool(String memoryPoolName) { |
47 List<MemoryPoolMXBean> pools = ManagementFactory.getMemoryPoolMXBeans(); |
48 List<MemoryPoolMXBean> pools = ManagementFactory.getMemoryPoolMXBeans(); |
48 for (MemoryPoolMXBean pool : pools) { |
49 for (MemoryPoolMXBean pool : pools) { |
49 if (pool.getName().equals(memoryPoolName)) { |
50 if (pool.getName().equals(memoryPoolName)) { |
50 return pool.getUsage(); |
51 return pool; |
51 } |
52 } |
52 } |
53 } |
53 |
54 |
54 throw new RuntimeException("Excpted to find a memory pool with name " + |
55 throw new RuntimeException("Excpted to find a memory pool with name " + |
55 memoryPoolName); |
56 memoryPoolName); |
56 } |
57 } |
57 |
58 |
58 private static void checkMemoryUsage(String memoryPoolName, String perfNS) |
59 private static void checkMemoryUsage(String memoryPoolName, String perfNS) |
59 throws Exception { |
60 throws Exception { |
60 // Need to do a gc before each comparison to update the perf counters |
61 MemoryPoolMXBean pool = getMemoryPool(memoryPoolName); |
61 |
62 |
|
63 // Must do a GC to update performance counters |
62 System.gc(); |
64 System.gc(); |
63 MemoryUsage mu = getMemoryUsage(memoryPoolName); |
65 assertEQ(getMinCapacity(perfNS), pool.getUsage().getInit()); |
64 assertEQ(getMinCapacity(perfNS), mu.getInit()); |
|
65 |
66 |
|
67 // Must do a second GC to update the perfomance counters again, since |
|
68 // the call pool.getUsage().getInit() could have allocated some |
|
69 // metadata. |
66 System.gc(); |
70 System.gc(); |
67 mu = getMemoryUsage(memoryPoolName); |
71 assertEQ(getUsed(perfNS), pool.getUsage().getUsed()); |
68 assertEQ(getUsed(perfNS), mu.getUsed()); |
72 assertEQ(getCapacity(perfNS), pool.getUsage().getCommitted()); |
69 |
|
70 System.gc(); |
|
71 mu = getMemoryUsage(memoryPoolName); |
|
72 assertEQ(getCapacity(perfNS), mu.getCommitted()); |
|
73 } |
73 } |
74 |
74 |
75 private static long getMinCapacity(String ns) throws Exception { |
75 private static long getMinCapacity(String ns) throws Exception { |
76 return PerfCounters.findByName(ns + ".minCapacity").longValue(); |
76 return PerfCounters.findByName(ns + ".minCapacity").longValue(); |
77 } |
77 } |