comparison test/gc/g1/TestGCLogMessages.java @ 17757:eff02b5bd56c

8035654: Add times for evacuation failure handling in "Other" time Summary: Detailed breakdown of time spent in the evacuation failure handling phases to make the "Other" time roughly correspond to the sum of its parts. Reviewed-by: jwilhelm, jmasa
author tschatzl
date Mon, 24 Mar 2014 15:30:46 +0100
parents a07bea31ef35
children 595c0f60d50d
comparison
equal deleted inserted replaced
17756:a07bea31ef35 17757:eff02b5bd56c
33 import com.oracle.java.testlibrary.ProcessTools; 33 import com.oracle.java.testlibrary.ProcessTools;
34 import com.oracle.java.testlibrary.OutputAnalyzer; 34 import com.oracle.java.testlibrary.OutputAnalyzer;
35 35
36 public class TestGCLogMessages { 36 public class TestGCLogMessages {
37 public static void main(String[] args) throws Exception { 37 public static void main(String[] args) throws Exception {
38 testNormalLogs();
39 testWithToSpaceExhaustionLogs();
40 }
41
42 private static void testNormalLogs() throws Exception {
38 43
39 ProcessBuilder pb = ProcessTools.createJavaProcessBuilder("-XX:+UseG1GC", 44 ProcessBuilder pb = ProcessTools.createJavaProcessBuilder("-XX:+UseG1GC",
40 "-Xmx10M", 45 "-Xmx10M",
41 GCTest.class.getName()); 46 GCTest.class.getName());
42 47
72 77
73 output.shouldContain("[Redirty Cards"); 78 output.shouldContain("[Redirty Cards");
74 output.shouldContain("[Code Root Purge"); 79 output.shouldContain("[Code Root Purge");
75 output.shouldContain("[Young Free CSet"); 80 output.shouldContain("[Young Free CSet");
76 output.shouldContain("[Non-Young Free CSet"); 81 output.shouldContain("[Non-Young Free CSet");
82
83 // also check evacuation failure messages once
84 output.shouldNotContain("[Evacuation Failure");
85 output.shouldNotContain("[Recalculate Used");
86 output.shouldNotContain("[Remove Self Forwards");
87 output.shouldNotContain("[Restore RemSet");
88 output.shouldHaveExitValue(0);
89 }
90
91 private static void testWithToSpaceExhaustionLogs() throws Exception {
92 ProcessBuilder pb = ProcessTools.createJavaProcessBuilder("-XX:+UseG1GC",
93 "-Xmx10M",
94 "-Xmn5M",
95 "-XX:+PrintGCDetails",
96 GCTestWithToSpaceExhaustion.class.getName());
97
98 OutputAnalyzer output = new OutputAnalyzer(pb.start());
99 output.shouldContain("[Evacuation Failure");
100 output.shouldNotContain("[Recalculate Used");
101 output.shouldNotContain("[Remove Self Forwards");
102 output.shouldNotContain("[Restore RemSet");
77 output.shouldHaveExitValue(0); 103 output.shouldHaveExitValue(0);
78 104
105 pb = ProcessTools.createJavaProcessBuilder("-XX:+UseG1GC",
106 "-Xmx10M",
107 "-Xmn5M",
108 "-XX:+PrintGCDetails",
109 "-XX:+UnlockExperimentalVMOptions",
110 "-XX:G1LogLevel=finest",
111 GCTestWithToSpaceExhaustion.class.getName());
112
113 output = new OutputAnalyzer(pb.start());
114 output.shouldContain("[Evacuation Failure");
115 output.shouldContain("[Recalculate Used");
116 output.shouldContain("[Remove Self Forwards");
117 output.shouldContain("[Restore RemSet");
118 output.shouldHaveExitValue(0);
79 } 119 }
80 120
81 static class GCTest { 121 static class GCTest {
82 private static byte[] garbage; 122 private static byte[] garbage;
83 public static void main(String [] args) { 123 public static void main(String [] args) {
87 garbage = new byte[128 * 1024]; 127 garbage = new byte[128 * 1024];
88 } 128 }
89 System.out.println("Done"); 129 System.out.println("Done");
90 } 130 }
91 } 131 }
132
133 static class GCTestWithToSpaceExhaustion {
134 private static byte[] garbage;
135 private static byte[] largeObject;
136 public static void main(String [] args) {
137 largeObject = new byte[5*1024*1024];
138 System.out.println("Creating garbage");
139 // create 128MB of garbage. This should result in at least one GC,
140 // some of them with to-space exhaustion.
141 for (int i = 0; i < 1024; i++) {
142 garbage = new byte[128 * 1024];
143 }
144 System.out.println("Done");
145 }
146 }
92 } 147 }