< prev index next >
test/gc/g1/TestGCLogMessages.java
Print this page
*** 22,32 ****
*/
/*
* @test TestGCLogMessages
* @bug 8035406 8027295 8035398 8019342 8027959 8048179 8027962 8069330
! * @summary Ensure that the PrintGCDetails output for a minor GC with G1
* includes the expected necessary messages.
* @key gc
* @library /testlibrary
* @modules java.base/sun.misc
* java.management
--- 22,32 ----
*/
/*
* @test TestGCLogMessages
* @bug 8035406 8027295 8035398 8019342 8027959 8048179 8027962 8069330
! * @summary Ensure the output for a minor GC with G1
* includes the expected necessary messages.
* @key gc
* @library /testlibrary
* @modules java.base/sun.misc
* java.management
*** 36,46 ****
import jdk.test.lib.OutputAnalyzer;
public class TestGCLogMessages {
private enum Level {
! OFF, FINER, FINEST;
public boolean lessOrEqualTo(Level other) {
return this.compareTo(other) < 0;
}
}
--- 36,46 ----
import jdk.test.lib.OutputAnalyzer;
public class TestGCLogMessages {
private enum Level {
! OFF, DEBUG, TRACE;
public boolean lessOrEqualTo(Level other) {
return this.compareTo(other) < 0;
}
}
*** 54,93 ****
}
};
private LogMessageWithLevel allLogMessages[] = new LogMessageWithLevel[] {
// Update RS
! new LogMessageWithLevel("Scan HCC (ms)", Level.FINER),
// Ext Root Scan
! new LogMessageWithLevel("Thread Roots (ms)", Level.FINEST),
! new LogMessageWithLevel("StringTable Roots (ms)", Level.FINEST),
! new LogMessageWithLevel("Universe Roots (ms)", Level.FINEST),
! new LogMessageWithLevel("JNI Handles Roots (ms)", Level.FINEST),
! new LogMessageWithLevel("ObjectSynchronizer Roots (ms)", Level.FINEST),
! new LogMessageWithLevel("FlatProfiler Roots", Level.FINEST),
! new LogMessageWithLevel("Management Roots", Level.FINEST),
! new LogMessageWithLevel("SystemDictionary Roots", Level.FINEST),
! new LogMessageWithLevel("CLDG Roots", Level.FINEST),
! new LogMessageWithLevel("JVMTI Roots", Level.FINEST),
! new LogMessageWithLevel("SATB Filtering", Level.FINEST),
! new LogMessageWithLevel("CM RefProcessor Roots", Level.FINEST),
! new LogMessageWithLevel("Wait For Strong CLD", Level.FINEST),
! new LogMessageWithLevel("Weak CLD Roots", Level.FINEST),
// Redirty Cards
! new LogMessageWithLevel("Redirty Cards", Level.FINER),
! new LogMessageWithLevel("Parallel Redirty", Level.FINEST),
! new LogMessageWithLevel("Redirtied Cards", Level.FINEST),
// Misc Top-level
! new LogMessageWithLevel("Code Root Purge", Level.FINER),
! new LogMessageWithLevel("String Dedup Fixup", Level.FINER),
! new LogMessageWithLevel("Expand Heap After Collection", Level.FINER),
// Free CSet
! new LogMessageWithLevel("Young Free CSet", Level.FINEST),
! new LogMessageWithLevel("Non-Young Free CSet", Level.FINEST),
// Humongous Eager Reclaim
! new LogMessageWithLevel("Humongous Reclaim", Level.FINER),
! new LogMessageWithLevel("Humongous Register", Level.FINER),
};
void checkMessagesAtLevel(OutputAnalyzer output, LogMessageWithLevel messages[], Level level) throws Exception {
for (LogMessageWithLevel l : messages) {
if (level.lessOrEqualTo(l.level)) {
--- 54,93 ----
}
};
private LogMessageWithLevel allLogMessages[] = new LogMessageWithLevel[] {
// Update RS
! new LogMessageWithLevel("Scan HCC", Level.DEBUG),
// Ext Root Scan
! new LogMessageWithLevel("Thread Roots:", Level.DEBUG),
! new LogMessageWithLevel("StringTable Roots:", Level.DEBUG),
! new LogMessageWithLevel("Universe Roots:", Level.DEBUG),
! new LogMessageWithLevel("JNI Handles Roots:", Level.DEBUG),
! new LogMessageWithLevel("ObjectSynchronizer Roots:", Level.DEBUG),
! new LogMessageWithLevel("FlatProfiler Roots", Level.DEBUG),
! new LogMessageWithLevel("Management Roots", Level.DEBUG),
! new LogMessageWithLevel("SystemDictionary Roots", Level.DEBUG),
! new LogMessageWithLevel("CLDG Roots", Level.DEBUG),
! new LogMessageWithLevel("JVMTI Roots", Level.DEBUG),
! new LogMessageWithLevel("SATB Filtering", Level.DEBUG),
! new LogMessageWithLevel("CM RefProcessor Roots", Level.DEBUG),
! new LogMessageWithLevel("Wait For Strong CLD", Level.DEBUG),
! new LogMessageWithLevel("Weak CLD Roots", Level.DEBUG),
// Redirty Cards
! new LogMessageWithLevel("Redirty Cards", Level.DEBUG),
! new LogMessageWithLevel("Parallel Redirty", Level.DEBUG),
! new LogMessageWithLevel("Redirtied Cards", Level.DEBUG),
// Misc Top-level
! new LogMessageWithLevel("Code Root Purge", Level.DEBUG),
! new LogMessageWithLevel("String Dedup Fixup", Level.DEBUG),
! new LogMessageWithLevel("Expand Heap After Collection", Level.DEBUG),
// Free CSet
! new LogMessageWithLevel("Young Free CSet", Level.TRACE),
! new LogMessageWithLevel("Non-Young Free CSet", Level.TRACE),
// Humongous Eager Reclaim
! new LogMessageWithLevel("Humongous Reclaim", Level.DEBUG),
! new LogMessageWithLevel("Humongous Register", Level.DEBUG),
};
void checkMessagesAtLevel(OutputAnalyzer output, LogMessageWithLevel messages[], Level level) throws Exception {
for (LogMessageWithLevel l : messages) {
if (level.lessOrEqualTo(l.level)) {
*** 114,170 ****
output.shouldHaveExitValue(0);
pb = ProcessTools.createJavaProcessBuilder("-XX:+UseG1GC",
"-XX:+UseStringDeduplication",
"-Xmx10M",
! "-XX:+PrintGCDetails",
GCTest.class.getName());
output = new OutputAnalyzer(pb.start());
! checkMessagesAtLevel(output, allLogMessages, Level.FINER);
pb = ProcessTools.createJavaProcessBuilder("-XX:+UseG1GC",
"-XX:+UseStringDeduplication",
"-Xmx10M",
! "-XX:+PrintGCDetails",
! "-XX:+UnlockExperimentalVMOptions",
! "-XX:G1LogLevel=finest",
GCTest.class.getName());
output = new OutputAnalyzer(pb.start());
! checkMessagesAtLevel(output, allLogMessages, Level.FINEST);
output.shouldHaveExitValue(0);
}
LogMessageWithLevel exhFailureMessages[] = new LogMessageWithLevel[] {
! new LogMessageWithLevel("Evacuation Failure", Level.FINER),
! new LogMessageWithLevel("Recalculate Used", Level.FINEST),
! new LogMessageWithLevel("Remove Self Forwards", Level.FINEST),
! new LogMessageWithLevel("Restore RemSet", Level.FINEST),
};
private void testWithToSpaceExhaustionLogs() throws Exception {
ProcessBuilder pb = ProcessTools.createJavaProcessBuilder("-XX:+UseG1GC",
"-Xmx32M",
"-Xmn16M",
! "-XX:+PrintGCDetails",
GCTestWithToSpaceExhaustion.class.getName());
OutputAnalyzer output = new OutputAnalyzer(pb.start());
! checkMessagesAtLevel(output, exhFailureMessages, Level.FINER);
output.shouldHaveExitValue(0);
pb = ProcessTools.createJavaProcessBuilder("-XX:+UseG1GC",
"-Xmx32M",
"-Xmn16M",
! "-XX:+PrintGCDetails",
! "-XX:+UnlockExperimentalVMOptions",
! "-XX:G1LogLevel=finest",
GCTestWithToSpaceExhaustion.class.getName());
output = new OutputAnalyzer(pb.start());
! checkMessagesAtLevel(output, exhFailureMessages, Level.FINEST);
output.shouldHaveExitValue(0);
}
static class GCTest {
private static byte[] garbage;
--- 114,166 ----
output.shouldHaveExitValue(0);
pb = ProcessTools.createJavaProcessBuilder("-XX:+UseG1GC",
"-XX:+UseStringDeduplication",
"-Xmx10M",
! "-Xlog:gc+phases=debug",
GCTest.class.getName());
output = new OutputAnalyzer(pb.start());
! checkMessagesAtLevel(output, allLogMessages, Level.DEBUG);
pb = ProcessTools.createJavaProcessBuilder("-XX:+UseG1GC",
"-XX:+UseStringDeduplication",
"-Xmx10M",
! "-Xlog:gc+phases=trace",
GCTest.class.getName());
output = new OutputAnalyzer(pb.start());
! checkMessagesAtLevel(output, allLogMessages, Level.TRACE);
output.shouldHaveExitValue(0);
}
LogMessageWithLevel exhFailureMessages[] = new LogMessageWithLevel[] {
! new LogMessageWithLevel("Evacuation Failure", Level.DEBUG),
! new LogMessageWithLevel("Recalculate Used", Level.TRACE),
! new LogMessageWithLevel("Remove Self Forwards", Level.TRACE),
! new LogMessageWithLevel("Restore RemSet", Level.TRACE),
};
private void testWithToSpaceExhaustionLogs() throws Exception {
ProcessBuilder pb = ProcessTools.createJavaProcessBuilder("-XX:+UseG1GC",
"-Xmx32M",
"-Xmn16M",
! "-Xlog:gc+phases=debug",
GCTestWithToSpaceExhaustion.class.getName());
OutputAnalyzer output = new OutputAnalyzer(pb.start());
! checkMessagesAtLevel(output, exhFailureMessages, Level.DEBUG);
output.shouldHaveExitValue(0);
pb = ProcessTools.createJavaProcessBuilder("-XX:+UseG1GC",
"-Xmx32M",
"-Xmn16M",
! "-Xlog:gc+phases=trace",
GCTestWithToSpaceExhaustion.class.getName());
output = new OutputAnalyzer(pb.start());
! checkMessagesAtLevel(output, exhFailureMessages, Level.TRACE);
output.shouldHaveExitValue(0);
}
static class GCTest {
private static byte[] garbage;
< prev index next >