Skip to content

Commit 07ab817

Browse files
author
Christian Mötzing
committed
Do not mark IBM J9 scavenge as full gc
Scavenge operation only affects young gen. See description of tag '<gc-start>' attribute 'type' value 'scavenge' at https://www.ibm.com/support/knowledgecenter/SSYKE2_8.0.0/com.ibm.java.vm.80.doc/docs/mm_gc_pd_verbose_increment.html
1 parent 71c72e7 commit 07ab817

File tree

3 files changed

+23
-14
lines changed

3 files changed

+23
-14
lines changed

src/main/java/com/tagtraum/perf/gcviewer/imp/DataReaderIBM_J9_R28.java

Lines changed: 11 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -216,10 +216,13 @@ else if (startEl.getName().getLocalPart().equals("mem")) {
216216
event.add(young);
217217
break;
218218
case "tenure":
219-
GCEvent tenured = new GCEvent();
220-
tenured.setType(Type.lookup("tenure"));
221-
setTotalAndPreUsed(tenured, startEl);
222-
event.add(tenured);
219+
// scavenge prints tenure space but does not change it as it is young only
220+
if(!typeName.contains("scavenge")) {
221+
GCEvent tenured = new GCEvent();
222+
tenured.setType(Type.lookup("tenure"));
223+
setTotalAndPreUsed(tenured, startEl);
224+
event.add(tenured);
225+
}
223226
break;
224227
// all other are ignored
225228
}
@@ -247,7 +250,10 @@ else if (startEl.getName().getLocalPart().equals("mem")) {
247250
setPostUsed(event.getYoung(), startEl);
248251
break;
249252
case "tenure":
250-
setPostUsed(event.getTenured(), startEl);
253+
// scavenge prints tenure space but does not change it as it is young only
254+
if(!event.getTypeAsString().contains("scavenge")) {
255+
setPostUsed(event.getTenured(), startEl);
256+
}
251257
break;
252258
// all other are ignored
253259
}

src/main/java/com/tagtraum/perf/gcviewer/model/AbstractGCEvent.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -709,9 +709,10 @@ public String toString() {
709709
public static final Type UJL_ZGC_HEAP_CAPACITY = new Type("Capacity", Generation.TENURED, Concurrency.SERIAL, GcPattern.GC_HEAP_MEMORY_PERCENTAGE);
710710

711711
// IBM Types
712-
// TODO: are scavenge always young only??
713-
public static final Type IBM_AF = new Type("af", Generation.YOUNG);
714712
public static final Type IBM_SYS = new Type("sys explicit", Generation.ALL);
713+
public static final Type IBM_AF = new Type("af", Generation.YOUNG);
714+
// scavenge is young only
715+
// see https://www.ibm.com/support/knowledgecenter/SSYKE2_8.0.0/com.ibm.java.vm.80.doc/docs/mm_gc_pd_verbose_increment.html
715716
public static final Type IBM_AF_SCAVENGE = new Type("af scavenge", Generation.YOUNG);
716717
public static final Type IBM_AF_GLOBAL = new Type("af global", Generation.TENURED);
717718
public static final Type IBM_SYS_GLOBAL = new Type("sys global", Generation.ALL);

src/test/java/com/tagtraum/perf/gcviewer/imp/TestDataReaderIBM_J9_R28.java

Lines changed: 9 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -12,10 +12,7 @@
1212

1313
import com.tagtraum.perf.gcviewer.UnittestHelper;
1414
import com.tagtraum.perf.gcviewer.UnittestHelper.FOLDER;
15-
import com.tagtraum.perf.gcviewer.model.GCEvent;
16-
import com.tagtraum.perf.gcviewer.model.GCModel;
17-
import com.tagtraum.perf.gcviewer.model.GCResource;
18-
import com.tagtraum.perf.gcviewer.model.GcResourceFile;
15+
import com.tagtraum.perf.gcviewer.model.*;
1916
import org.junit.Test;
2017

2118
/**
@@ -62,8 +59,9 @@ public void testAfScavenge() throws Exception {
6259
assertThat("timestamp 1", event.getTimestamp(), closeTo(0.0, 0.0001));
6360
assertThat("timestamp 2", model.get(1).getTimestamp(), closeTo(1.272, 0.0001));
6461

65-
assertThat("type", event.getTypeAsString(), equalTo("af scavenge; nursery; tenure"));
66-
62+
assertThat("type", event.getTypeAsString(), equalTo("af scavenge; nursery"));
63+
assertThat("generation", event.getExtendedType().getGeneration(), is(AbstractGCEvent.Generation.YOUNG));
64+
assertThat("full", event.isFull(), is(false));
6765
assertThat("number of errors", handler.getCount(), is(0));
6866
}
6967

@@ -130,9 +128,13 @@ public void testConcurrentCollection() throws Exception {
130128
DataReader reader = getDataReader(gcResource);
131129
GCModel model = reader.read();
132130

131+
AbstractGCEvent<?> event = model.get(0);
133132
assertThat("model size", model.size(), is(1));
134-
assertThat("duration", model.get(0).getPause(), closeTo(1.182375, 0.00000001));
133+
assertThat("duration", event.getPause(), closeTo(1.182375, 0.00000001));
135134
assertThat("number of errors", handler.getCount(), is(0));
135+
136+
assertThat("", event.getExtendedType().getConcurrency(), is(AbstractGCEvent.Concurrency.CONCURRENT));
137+
assertThat("", event.getExtendedType().getGeneration(), is(AbstractGCEvent.Generation.ALL));
136138
}
137139

138140
}

0 commit comments

Comments
 (0)