33 import jdk.test.lib.ProcessTools;
34 import jdk.test.lib.OutputAnalyzer;
35
36 public class TestDynamicNumberOfGCThreads {
37 public static void main(String[] args) throws Exception {
38
39 testDynamicNumberOfGCThreads("UseConcMarkSweepGC");
40
41 testDynamicNumberOfGCThreads("UseG1GC");
42
43 testDynamicNumberOfGCThreads("UseParallelGC");
44 }
45
46 private static void verifyDynamicNumberOfGCThreads(OutputAnalyzer output) {
47 output.shouldHaveExitValue(0); // test should run succesfully
48 output.shouldContain("new_active_workers");
49 }
50
51 private static void testDynamicNumberOfGCThreads(String gcFlag) throws Exception {
52 // UseDynamicNumberOfGCThreads and TraceDynamicGCThreads enabled
53 String[] baseArgs = {"-XX:+" + gcFlag, "-Xmx10M", "-XX:+PrintGCDetails", "-XX:+UseDynamicNumberOfGCThreads", "-XX:+TraceDynamicGCThreads", GCTest.class.getName()};
54
55 // Base test with gc and +UseDynamicNumberOfGCThreads:
56 ProcessBuilder pb_enabled = ProcessTools.createJavaProcessBuilder(baseArgs);
57 verifyDynamicNumberOfGCThreads(new OutputAnalyzer(pb_enabled.start()));
58
59 // Ensure it also works on uniprocessors or if user specifies -XX:ParallelGCThreads=1:
60 String[] extraArgs = {"-XX:+UnlockDiagnosticVMOptions", "-XX:+ForceDynamicNumberOfGCThreads", "-XX:ParallelGCThreads=1"};
61 String[] finalArgs = new String[baseArgs.length + extraArgs.length];
62 System.arraycopy(extraArgs, 0, finalArgs, 0, extraArgs.length);
63 System.arraycopy(baseArgs, 0, finalArgs, extraArgs.length, baseArgs.length);
64 pb_enabled = ProcessTools.createJavaProcessBuilder(finalArgs);
65 verifyDynamicNumberOfGCThreads(new OutputAnalyzer(pb_enabled.start()));
66 }
67
68 static class GCTest {
69 private static byte[] garbage;
70 public static void main(String [] args) {
71 System.out.println("Creating garbage");
72 // create 128MB of garbage. This should result in at least one GC
73 for (int i = 0; i < 1024; i++) {
|
33 import jdk.test.lib.ProcessTools;
34 import jdk.test.lib.OutputAnalyzer;
35
36 public class TestDynamicNumberOfGCThreads {
37 public static void main(String[] args) throws Exception {
38
39 testDynamicNumberOfGCThreads("UseConcMarkSweepGC");
40
41 testDynamicNumberOfGCThreads("UseG1GC");
42
43 testDynamicNumberOfGCThreads("UseParallelGC");
44 }
45
46 private static void verifyDynamicNumberOfGCThreads(OutputAnalyzer output) {
47 output.shouldHaveExitValue(0); // test should run succesfully
48 output.shouldContain("new_active_workers");
49 }
50
51 private static void testDynamicNumberOfGCThreads(String gcFlag) throws Exception {
52 // UseDynamicNumberOfGCThreads and TraceDynamicGCThreads enabled
53 String[] baseArgs = {"-XX:+" + gcFlag, "-Xmx10M", "-XX:+UseDynamicNumberOfGCThreads", "-Xlog:gc+task=trace", GCTest.class.getName()};
54
55 // Base test with gc and +UseDynamicNumberOfGCThreads:
56 ProcessBuilder pb_enabled = ProcessTools.createJavaProcessBuilder(baseArgs);
57 verifyDynamicNumberOfGCThreads(new OutputAnalyzer(pb_enabled.start()));
58
59 // Ensure it also works on uniprocessors or if user specifies -XX:ParallelGCThreads=1:
60 String[] extraArgs = {"-XX:+UnlockDiagnosticVMOptions", "-XX:+ForceDynamicNumberOfGCThreads", "-XX:ParallelGCThreads=1"};
61 String[] finalArgs = new String[baseArgs.length + extraArgs.length];
62 System.arraycopy(extraArgs, 0, finalArgs, 0, extraArgs.length);
63 System.arraycopy(baseArgs, 0, finalArgs, extraArgs.length, baseArgs.length);
64 pb_enabled = ProcessTools.createJavaProcessBuilder(finalArgs);
65 verifyDynamicNumberOfGCThreads(new OutputAnalyzer(pb_enabled.start()));
66 }
67
68 static class GCTest {
69 private static byte[] garbage;
70 public static void main(String [] args) {
71 System.out.println("Creating garbage");
72 // create 128MB of garbage. This should result in at least one GC
73 for (int i = 0; i < 1024; i++) {
|