32 * java.management 33 */ 34 35 import jdk.test.lib.ProcessTools; 36 import jdk.test.lib.OutputAnalyzer; 37 import java.util.LinkedList; 38 39 public class TestG1TraceEagerReclaimHumongousObjects { 40 public static void main(String[] args) throws Exception { 41 testGCLogs(); 42 testHumongousObjectGCLogs(); 43 } 44 45 private static void testGCLogs() throws Exception { 46 47 ProcessBuilder pb = ProcessTools.createJavaProcessBuilder("-XX:+UseG1GC", 48 "-Xms128M", 49 "-Xmx128M", 50 "-Xmn16M", 51 "-XX:G1HeapRegionSize=1M", 52 "-XX:+PrintGC", 53 "-XX:+UnlockExperimentalVMOptions", 54 "-XX:G1LogLevel=finest", 55 "-XX:+G1TraceEagerReclaimHumongousObjects", 56 GCTest.class.getName()); 57 58 OutputAnalyzer output = new OutputAnalyzer(pb.start()); 59 60 // As G1EagerReclaimHumongousObjects is set(default), below logs should be displayed. 61 // And GCTest doesn't have humongous objects, so values should be zero. 62 output.shouldContain("[Humongous Reclaim"); 63 output.shouldContain("[Humongous Total: 0]"); 64 output.shouldContain("[Humongous Candidate: 0]"); 65 output.shouldContain("[Humongous Reclaimed: 0]"); 66 67 output.shouldHaveExitValue(0); 68 } 69 70 private static void testHumongousObjectGCLogs() throws Exception { 71 ProcessBuilder pb = ProcessTools.createJavaProcessBuilder("-XX:+UseG1GC", 72 "-Xms128M", 73 "-Xmx128M", 74 "-Xmn16M", 75 "-XX:G1HeapRegionSize=1M", 76 "-XX:+PrintGC", 77 "-XX:+UnlockExperimentalVMOptions", 78 "-XX:G1LogLevel=finest", 79 "-XX:+G1TraceEagerReclaimHumongousObjects", 80 GCWithHumongousObjectTest.class.getName()); 81 82 OutputAnalyzer output = new OutputAnalyzer(pb.start()); 83 84 // As G1ReclaimDeadHumongousObjectsAtYoungGC is set(default), below logs should be displayed. 85 output.shouldContain("[Humongous Reclaim"); 86 output.shouldContain("[Humongous Total"); 87 output.shouldContain("[Humongous Candidate"); 88 output.shouldContain("[Humongous Reclaimed"); 89 90 // As G1TraceReclaimDeadHumongousObjectsAtYoungGC is set and GCWithHumongousObjectTest has humongous objects, 91 // these logs should be displayed. 92 output.shouldContain("Live humongous"); 93 output.shouldContain("Dead humongous region"); 94 output.shouldHaveExitValue(0); 95 } 96 97 static class GCTest { 98 private static byte[] garbage; 99 100 public static void main(String [] args) { 101 System.out.println("Creating garbage"); 102 // create 128MB of garbage. This should result in at least one GC 103 for (int i = 0; i < 1024; i++) { 104 garbage = new byte[128 * 1024]; 105 } 106 System.out.println("Done"); 107 } 108 } | 32 * java.management 33 */ 34 35 import jdk.test.lib.ProcessTools; 36 import jdk.test.lib.OutputAnalyzer; 37 import java.util.LinkedList; 38 39 public class TestG1TraceEagerReclaimHumongousObjects { 40 public static void main(String[] args) throws Exception { 41 testGCLogs(); 42 testHumongousObjectGCLogs(); 43 } 44 45 private static void testGCLogs() throws Exception { 46 47 ProcessBuilder pb = ProcessTools.createJavaProcessBuilder("-XX:+UseG1GC", 48 "-Xms128M", 49 "-Xmx128M", 50 "-Xmn16M", 51 "-XX:G1HeapRegionSize=1M", 52 "-Xlog:gc+phases=trace", 53 "-XX:+UnlockExperimentalVMOptions", 54 GCTest.class.getName()); 55 56 OutputAnalyzer output = new OutputAnalyzer(pb.start()); 57 58 // As G1EagerReclaimHumongousObjects is set(default), below logs should be displayed. 59 // And GCTest doesn't have humongous objects, so values should be zero. 60 output.shouldContain("Humongous Reclaim"); 61 output.shouldContain("Humongous Total: 0"); 62 output.shouldContain("Humongous Candidate: 0"); 63 output.shouldContain("Humongous Reclaimed: 0"); 64 65 output.shouldHaveExitValue(0); 66 } 67 68 private static void testHumongousObjectGCLogs() throws Exception { 69 ProcessBuilder pb = ProcessTools.createJavaProcessBuilder("-XX:+UseG1GC", 70 "-Xms128M", 71 "-Xmx128M", 72 "-Xmn16M", 73 "-XX:G1HeapRegionSize=1M", 74 "-Xlog:gc+phases=trace,gc+humongous=trace", 75 "-XX:+UnlockExperimentalVMOptions", 76 GCWithHumongousObjectTest.class.getName()); 77 78 OutputAnalyzer output = new OutputAnalyzer(pb.start()); 79 80 // As G1ReclaimDeadHumongousObjectsAtYoungGC is set(default), below logs should be displayed. 81 output.shouldContain("Humongous Reclaim"); 82 output.shouldContain("Humongous Total"); 83 output.shouldContain("Humongous Candidate"); 84 output.shouldContain("Humongous Reclaimed"); 85 86 // As G1TraceReclaimDeadHumongousObjectsAtYoungGC is set and GCWithHumongousObjectTest has humongous objects, 87 // these logs should be displayed. 88 output.shouldContain("Live humongous"); 89 output.shouldContain("Dead humongous region"); 90 output.shouldHaveExitValue(0); 91 } 92 93 static class GCTest { 94 private static byte[] garbage; 95 96 public static void main(String [] args) { 97 System.out.println("Creating garbage"); 98 // create 128MB of garbage. This should result in at least one GC 99 for (int i = 0; i < 1024; i++) { 100 garbage = new byte[128 * 1024]; 101 } 102 System.out.println("Done"); 103 } 104 } |