hotspot/test/gc/metaspace/TestPerfCountersAndMemoryPools.java
changeset 20384 49bfb2ec8f8f
parent 20314 150e62794be5
child 27692 11c231c781dc
equal deleted inserted replaced
20383:17751fe4f7bf 20384:49bfb2ec8f8f
    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     }