private void doParseReferenceGC()

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();
        }
    }