final VmAbstractHeap firstHeap = heapManager.getFirstHeap();
final VmAbstractHeap firstHeap = heapManager.getHeapList();
    final void gc() {        // Prepare        final VmBootHeap bootHeap = heapManager.getBootHeap();        final VmAbstractHeap firstHeap = heapManager.getFirstHeap();        stats.lastGCTime = System.currentTimeMillis();        final boolean locking = (writeBarrier != null);        final boolean verbose = debug;        helper.stopThreadsAtSafePoint();        heapManager.setGcActive(true);        try {            // Mark            //helper.stopThreadsAtSafePoint();            //heapManager.setGcActive(true);            try {                if (verbose) {                    Unsafe.debug("<mark/>");                }                markHeap(bootHeap, firstHeap, locking);            } finally {                //heapManager.setGcActive(false);                //helper.restartThreads();            }            // Sweep            if (verbose) {                Unsafe.debug("<sweep/>");            }            sweep(firstHeap);            // Cleanup            if (verbose) {                Unsafe.debug("<cleanup/>");            }            cleanup(bootHeap, firstHeap);            // Verification            if (debug) {                if (verbose) {                    Unsafe.debug("<verify/>");                }                verify(bootHeap, firstHeap);            }        } finally {            heapManager.setGcActive(false);            heapManager.resetCurrentHeap();            helper.restartThreads();        }        // Start the finalization process        heapManager.triggerFinalization();        if (verbose) {            Unsafe.debug("</gc free=");            Unsafe.debug(heapManager.getFreeMemory());            Unsafe.debug("/>");            if (debug) {                System.out.println(stats);            }        }    }