diff --git a/src/main/java/com/tagtraum/perf/gcviewer/model/GCModel.java b/src/main/java/com/tagtraum/perf/gcviewer/model/GCModel.java index 0f6e310c..fc72bd59 100644 --- a/src/main/java/com/tagtraum/perf/gcviewer/model/GCModel.java +++ b/src/main/java/com/tagtraum/perf/gcviewer/model/GCModel.java @@ -651,9 +651,10 @@ private void updatePromotion(GCEvent event) { } if (youngEvent != null) { - promotion.add((youngEvent.getPreUsed() - youngEvent.getPostUsed()) - - (event.getPreUsed() - event.getPostUsed()) - ); + int promo = (youngEvent.getPreUsed() - youngEvent.getPostUsed()) - (event.getPreUsed() - event.getPostUsed()); + if (promo >= 0) { + promotion.add(promo); + } } } } diff --git a/src/test/java/com/tagtraum/perf/gcviewer/imp/TestDataReaderUJLG1JDK11.java b/src/test/java/com/tagtraum/perf/gcviewer/imp/TestDataReaderUJLG1JDK11.java index 0e0214aa..79e69aae 100644 --- a/src/test/java/com/tagtraum/perf/gcviewer/imp/TestDataReaderUJLG1JDK11.java +++ b/src/test/java/com/tagtraum/perf/gcviewer/imp/TestDataReaderUJLG1JDK11.java @@ -180,4 +180,32 @@ public void testPauseYoungConcurrentStartMetadataGcThreshold() throws Exception assertThat("event type", model.get(0).getExtendedType().getType(), is(Type.UJL_PAUSE_YOUNG)); assertThat("total heap", model.get(0).getTotal(), is(256 * 1024)); } + + @Test + public void testPauseNoPromotion() throws IOException { + TestLogHandler handler = new TestLogHandler(); + handler.setLevel(Level.WARNING); + GCResource gcResource = new GcResourceFile("byteArray"); + gcResource.getLogger().addHandler(handler); + InputStream in = new ByteArrayInputStream( + ("[12.029s][info][gc,start ] GC(9) Pause Young (Normal) (G1 Evacuation Pause)\n" + + "[12.029s][info][gc,task ] GC(9) Using 8 workers of 8 for evacuation\n" + + "[12.034s][info][gc,phases ] GC(9) Pre Evacuate Collection Set: 0.0ms\n" + + "[12.034s][info][gc,phases ] GC(9) Evacuate Collection Set: 4.4ms\n" + + "[12.034s][info][gc,phases ] GC(9) Post Evacuate Collection Set: 0.5ms\n" + + "[12.034s][info][gc,phases ] GC(9) Other: 0.2ms\n" + + "[12.034s][info][gc,heap ] GC(9) Eden regions: 143->0(142)\n" + + "[12.034s][info][gc,heap ] GC(9) Survivor regions: 10->11(20)\n" + + "[12.034s][info][gc,heap ] GC(9) Old regions: 8->8\n" + + "[12.034s][info][gc,heap ] GC(9) Humongous regions: 2->2\n" + + "[12.034s][info][gc,metaspace ] GC(9) Metaspace: 40737K->40737K(1085440K)\n" + + "[12.034s][info][gc ] GC(9) Pause Young (Normal) (G1 Evacuation Pause) 162M->19M(256M) 5.351ms\n" + + "[12.034s][info][gc,cpu ] GC(9) User=0.00s Sys=0.00s Real=0.01s") + .getBytes()); + + DataReader reader = new DataReaderUnifiedJvmLogging(gcResource, in); + GCModel model = reader.read(); + + assertThat("promotion", model.getPromotion().getSum(), is(0L)); + } }