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++) {
74 garbage = new byte[128 * 1024];
75 }
76 System.out.println("Done");
77 }
78 }
79 }
|
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 // Turn on parallel reference processing
68 String[] parRefProcArg = {"-XX:+ParallelRefProcEnabled", "-XX:-ShowMessageBoxOnError"};
69 String[] parRefArgs = new String[baseArgs.length + parRefProcArg.length];
70 System.arraycopy(parRefProcArg, 0, parRefArgs, 0, parRefProcArg.length);
71 System.arraycopy(baseArgs, 0, parRefArgs, parRefProcArg.length, baseArgs.length);
72 pb_enabled = ProcessTools.createJavaProcessBuilder(parRefArgs);
73 verifyDynamicNumberOfGCThreads(new OutputAnalyzer(pb_enabled.start()));
74 }
75
76 static class GCTest {
77 private static byte[] garbage;
78 public static void main(String [] args) {
79 System.out.println("Creating garbage");
80 // create 128MB of garbage. This should result in at least one GC
81 for (int i = 0; i < 1024; i++) {
82 garbage = new byte[128 * 1024];
83 }
84 System.out.println("Done");
85 }
86 }
87 }
|