in analysis/gc-log/src/main/java/org/eclipse/jifa/gclog/parser/AbstractPreUnifiedGCLogParser.java [315:362]
private void doParseReferenceGC(GCEvent event, String title, String referenceGCString) {
GCEvent referenceGCEvent = getReferenceGCEvent();
if (referenceGCEvent == null) {
return;
}
ReferenceGC referenceGC = referenceGCEvent.getReferenceGC();
if (referenceGC == null) {
referenceGC = new ReferenceGC();
referenceGCEvent.setReferenceGC(referenceGC);
}
List<Integer> counts = null;
if (referenceGCString != null) {
counts = Arrays.stream(referenceGCString.split(", "))
.map(s -> Integer.parseInt(s.substring(0, s.length() - " refs".length())))
.collect(Collectors.toList());
}
switch (title) {
case "SoftReference":
referenceGC.setSoftReferencePauseTime(event.getDuration());
referenceGC.setSoftReferenceStartTime(event.getStartTime());
referenceGC.setSoftReferenceCount(counts.get(0));
break;
case "WeakReference":
referenceGC.setWeakReferencePauseTime(event.getDuration());
referenceGC.setWeakReferenceStartTime(event.getStartTime());
referenceGC.setWeakReferenceCount(counts.get(0));
break;
case "FinalReference":
referenceGC.setFinalReferencePauseTime(event.getDuration());
referenceGC.setFinalReferenceStartTime(event.getStartTime());
referenceGC.setFinalReferenceCount(counts.get(0));
break;
case "PhantomReference":
referenceGC.setPhantomReferencePauseTime(event.getDuration());
referenceGC.setPhantomReferenceStartTime(event.getStartTime());
referenceGC.setPhantomReferenceCount(counts.get(0));
if (counts.size() > 1) {
referenceGC.setPhantomReferenceFreedCount(counts.get(1));
}
break;
case "JNI Weak Reference":
referenceGC.setJniWeakReferencePauseTime(event.getDuration());
referenceGC.setJniWeakReferenceStartTime(event.getStartTime());
break;
default:
throw new ShouldNotReachHereException();
}
}