private static boolean parseHeap()

in analysis/gc-log/src/main/java/org/eclipse/jifa/gclog/parser/UnifiedG1OrGenerationalGCLogParser.java [203:240]


    private static boolean parseHeap(AbstractGCLogParser parser, ParseRuleContext context, String s) {
        GCModel model = parser.getModel();
        String[] parts = GCLogUtil.splitBySpace(s);
        if (parts.length != 2 && parts.length != 3 && parts.length != 6) {
            return false;
        }
        String generationName = parts[0];
        if (generationName.endsWith(":")) {
            generationName = generationName.substring(0, generationName.length() - 1);
        }
        MemoryArea generation = MemoryArea.getMemoryArea(generationName);
        if (generation == null) {
            return false;
        }
        // format check done

        GCEvent event = model.getLastEventOfGCID(context.get(GCID));
        if (event == null) {
            // log may be incomplete
            return true;
        }
        if (event.getEventType() == CMS_CONCURRENT_MARK_SWEPT) {
            event = event.getLastPhaseOfType(CMS_CONCURRENT_SWEEP);
            if (event == null) {
                return true;
            }
        }
        long[] memories = GCLogUtil.parseMemorySizeFromTo(parts.length == 3 ? parts[2] :parts[1], 1);
        // will multiply region size before calculating derived info for g1
        GCMemoryItem item = new GCMemoryItem(generation, memories);
        event.setMemoryItem(item);

        if (parts.length == 6) {
            event.setMemoryItem(new GCMemoryItem(MemoryArea.EDEN, GCLogUtil.parseMemorySizeFromTo(parts[3])));
            event.setMemoryItem(new GCMemoryItem(MemoryArea.SURVIVOR, GCLogUtil.parseMemorySizeFromTo(parts[5])));
        }
        return true;
    }