bool dvmHeapBeginMarkStep() { GcMarkContext *mc = &gDvm.gcHeap->markContext; HeapBitmap objectBitmaps[HEAP_SOURCE_MAX_HEAP_COUNT]; size_t numBitmaps; if (!createMarkStack(&mc->stack)) { return false; } numBitmaps = dvmHeapSourceGetObjectBitmaps(objectBitmaps, HEAP_SOURCE_MAX_HEAP_COUNT); if (numBitmaps <= 0) { return false; } /* Create mark bitmaps that cover the same ranges as the * current object bitmaps. */ if (!dvmHeapBitmapInitListFromTemplates(mc->bitmaps, objectBitmaps, numBitmaps, "mark")) { return false; } mc->numBitmaps = numBitmaps; mc->finger = NULL; #if WITH_OBJECT_HEADERS gGeneration++; #endif return true; }
bool dvmHeapBeginMarkStep(GcMode mode) { GcMarkContext *ctx = &gDvm.gcHeap->markContext; if (!createMarkStack(&ctx->stack)) { return false; } ctx->finger = NULL; ctx->immuneLimit = dvmHeapSourceGetImmuneLimit(mode); return true; }
bool dvmHeapBeginMarkStep(bool isPartial) { GcMarkContext *ctx = &gDvm.gcHeap->markContext; if (!createMarkStack(&ctx->stack)) { return false; } ctx->finger = NULL; ctx->immuneLimit = (char*)dvmHeapSourceGetImmuneLimit(isPartial); return true; }