hotspot/test/gc/arguments/TestG1HeapRegionSize.java
changeset 33144 c56850e328fc
parent 32613 73bec9f941d7
child 38152 80e5da81fb2c
equal deleted inserted replaced
33143:2083f82acec8 33144:c56850e328fc
    23 
    23 
    24 /*
    24 /*
    25  * @test TestG1HeapRegionSize
    25  * @test TestG1HeapRegionSize
    26  * @key gc
    26  * @key gc
    27  * @bug 8021879
    27  * @bug 8021879
       
    28  * @requires vm.gc=="null" | vm.gc=="G1"
    28  * @summary Verify that the flag G1HeapRegionSize is updated properly
    29  * @summary Verify that the flag G1HeapRegionSize is updated properly
    29  * @modules java.management/sun.management
    30  * @modules java.management/sun.management
    30  * @run main/othervm -Xmx64m TestG1HeapRegionSize 1048576
    31  * @library /testlibrary
    31  * @run main/othervm -XX:G1HeapRegionSize=2m -Xmx64m TestG1HeapRegionSize 2097152
    32  * @run main TestG1HeapRegionSize
    32  * @run main/othervm -XX:G1HeapRegionSize=3m -Xmx64m TestG1HeapRegionSize 2097152
       
    33  * @run main/othervm -XX:G1HeapRegionSize=64m -Xmx256m TestG1HeapRegionSize 33554432
       
    34  */
    33  */
    35 
    34 
    36 import com.sun.management.HotSpotDiagnosticMXBean;
    35 import java.util.regex.Matcher;
    37 import com.sun.management.VMOption;
    36 import java.util.regex.Pattern;
    38 import java.lang.management.ManagementFactory;
    37 
       
    38 import java.util.ArrayList;
       
    39 import java.util.Arrays;
       
    40 
       
    41 import jdk.test.lib.*;
    39 
    42 
    40 public class TestG1HeapRegionSize {
    43 public class TestG1HeapRegionSize {
    41 
    44 
    42   public static void main(String[] args) {
    45   private static void checkG1HeapRegionSize(String[] flags, int expectedValue, int exitValue) throws Exception {
    43     HotSpotDiagnosticMXBean diagnostic =
    46     ArrayList<String> flagList = new ArrayList<String>();
    44         ManagementFactory.getPlatformMXBean(HotSpotDiagnosticMXBean.class);
    47     flagList.addAll(Arrays.asList(flags));
       
    48     flagList.add("-XX:+UseG1GC");
       
    49     flagList.add("-XX:+PrintFlagsFinal");
       
    50     flagList.add("-version");
    45 
    51 
    46     String expectedValue = getExpectedValue(args);
    52     ProcessBuilder pb = ProcessTools.createJavaProcessBuilder(flagList.toArray(new String[0]));
    47     VMOption option = diagnostic.getVMOption("UseG1GC");
    53     OutputAnalyzer output = new OutputAnalyzer(pb.start());
    48     if (option.getValue().equals("false")) {
    54     output.shouldHaveExitValue(exitValue);
    49       System.out.println("Skipping this test. It is only a G1 test.");
       
    50       return;
       
    51     }
       
    52 
    55 
    53     option = diagnostic.getVMOption("G1HeapRegionSize");
    56     if (exitValue == 0) {
    54     if (!expectedValue.equals(option.getValue())) {
    57       String stdout = output.getStdout();
    55       throw new RuntimeException("Wrong value for G1HeapRegionSize. Expected " + expectedValue + " but got " + option.getValue());
    58       int flagValue = getFlagValue("G1HeapRegionSize", stdout);
       
    59       if (flagValue != expectedValue) {
       
    60         throw new RuntimeException("Wrong value for G1HeapRegionSize. Expected " + expectedValue + " but got " + flagValue);
       
    61       }
    56     }
    62     }
    57   }
    63   }
    58 
    64 
    59   private static String getExpectedValue(String[] args) {
    65   private static int getFlagValue(String flag, String where) {
    60     if (args.length != 1) {
    66     Matcher m = Pattern.compile(flag + "\\s+:?=\\s+\\d+").matcher(where);
    61       throw new RuntimeException("Wrong number of arguments. Expected 1 but got " + args.length);
    67     if (!m.find()) {
       
    68       throw new RuntimeException("Could not find value for flag " + flag + " in output string");
    62     }
    69     }
    63     return args[0];
    70     String match = m.group();
       
    71     return Integer.parseInt(match.substring(match.lastIndexOf(" ") + 1, match.length()));
    64   }
    72   }
    65 
    73 
       
    74   public static void main(String args[]) throws Exception {
       
    75     final int M = 1024 * 1024;
       
    76 
       
    77     checkG1HeapRegionSize(new String[] { "-Xmx64m"   /* default is 1m */        },  1*M, 0);
       
    78     checkG1HeapRegionSize(new String[] { "-Xmx64m",  "-XX:G1HeapRegionSize=2m"  },  2*M, 0);
       
    79     checkG1HeapRegionSize(new String[] { "-Xmx64m",  "-XX:G1HeapRegionSize=3m"  },  2*M, 0);
       
    80     checkG1HeapRegionSize(new String[] { "-Xmx256m", "-XX:G1HeapRegionSize=32m" }, 32*M, 0);
       
    81     checkG1HeapRegionSize(new String[] { "-Xmx256m", "-XX:G1HeapRegionSize=64m" }, 32*M, 1);
       
    82   }
    66 }
    83 }