From 1b00e467512e74b2ba5170881a13509b0393f8e8 Mon Sep 17 00:00:00 2001 From: Thomas Schatzl Date: Mon, 12 Oct 2020 20:01:52 +0200 Subject: [PATCH] Initial import --- .../jtreg/gc/g1/TestGCLogMessages.java | 27 ++++++++++++------- 1 file changed, 18 insertions(+), 9 deletions(-) diff --git a/test/hotspot/jtreg/gc/g1/TestGCLogMessages.java b/test/hotspot/jtreg/gc/g1/TestGCLogMessages.java index 6849be5a1a710..50ed74940bbb5 100644 --- a/test/hotspot/jtreg/gc/g1/TestGCLogMessages.java +++ b/test/hotspot/jtreg/gc/g1/TestGCLogMessages.java @@ -39,6 +39,7 @@ */ import jdk.test.lib.process.OutputAnalyzer; +import jdk.test.lib.Platform; import jdk.test.lib.process.ProcessTools; import sun.hotspot.code.Compiler; @@ -182,7 +183,9 @@ void checkMessagesAtLevel(OutputAnalyzer output, LogMessageWithLevel messages[], public static void main(String[] args) throws Exception { new TestGCLogMessages().testNormalLogs(); new TestGCLogMessages().testConcurrentRefinementLogs(); - new TestGCLogMessages().testWithToSpaceExhaustionLogs(); + if (Platform.isDebugBuild()) { + new TestGCLogMessages().testWithEvacuationFailureLogs(); + } new TestGCLogMessages().testWithConcurrentStart(); new TestGCLogMessages().testExpandHeap(); } @@ -240,12 +243,15 @@ private void testConcurrentRefinementLogs() throws Exception { new LogMessageWithLevel("Remove Self Forwards", Level.TRACE), }; - private void testWithToSpaceExhaustionLogs() throws Exception { + private void testWithEvacuationFailureLogs() throws Exception { ProcessBuilder pb = ProcessTools.createJavaProcessBuilder("-XX:+UseG1GC", "-Xmx32M", "-Xmn16M", + "-XX:+G1EvacuationFailureALot", + "-XX:G1EvacuationFailureALotCount=100", + "-XX:G1EvacuationFailureALotInterval=1", "-Xlog:gc+phases=debug", - GCTestWithToSpaceExhaustion.class.getName()); + GCTestWithEvacuationFailure.class.getName()); OutputAnalyzer output = new OutputAnalyzer(pb.start()); checkMessagesAtLevel(output, exhFailureMessages, Level.DEBUG); @@ -255,7 +261,7 @@ private void testWithToSpaceExhaustionLogs() throws Exception { "-Xmx32M", "-Xmn16M", "-Xlog:gc+phases=trace", - GCTestWithToSpaceExhaustion.class.getName()); + GCTestWithEvacuationFailure.class.getName()); output = new OutputAnalyzer(pb.start()); checkMessagesAtLevel(output, exhFailureMessages, Level.TRACE); @@ -304,16 +310,19 @@ public static void main(String [] args) { } } - static class GCTestWithToSpaceExhaustion { + static class GCTestWithEvacuationFailure { private static byte[] garbage; private static byte[] largeObject; + private static Object[] holder = new Object[200]; // Must be larger than G1EvacuationFailureALotCount + public static void main(String [] args) { largeObject = new byte[16*1024*1024]; System.out.println("Creating garbage"); - // create 128MB of garbage. This should result in at least one GC, - // some of them with to-space exhaustion. - for (int i = 0; i < 1024; i++) { - garbage = new byte[128 * 1024]; + // Create 16 MB of garbage. This should result in at least one GC, + // (Heap size is 32M, we use 17MB for the large object above) + // which is larger than G1EvacuationFailureALotInterval. + for (int i = 0; i < 16 * 1024; i++) { + holder[i % holder.length] = new byte[1024]; } System.out.println("Done"); }