void MarkedSpace::resetAllocators() { for (size_t cellSize = preciseStep; cellSize <= preciseCutoff; cellSize += preciseStep) { allocatorFor(cellSize).reset(); normalDestructorAllocatorFor(cellSize).reset(); immortalStructureDestructorAllocatorFor(cellSize).reset(); } for (size_t cellSize = impreciseStep; cellSize <= impreciseCutoff; cellSize += impreciseStep) { allocatorFor(cellSize).reset(); normalDestructorAllocatorFor(cellSize).reset(); immortalStructureDestructorAllocatorFor(cellSize).reset(); } m_normalSpace.largeAllocator.reset(); m_normalDestructorSpace.largeAllocator.reset(); m_immortalStructureDestructorSpace.largeAllocator.reset(); }
void MarkedSpace::canonicalizeCellLivenessData() { for (size_t cellSize = preciseStep; cellSize <= preciseCutoff; cellSize += preciseStep) { allocatorFor(cellSize).canonicalizeCellLivenessData(); normalDestructorAllocatorFor(cellSize).canonicalizeCellLivenessData(); immortalStructureDestructorAllocatorFor(cellSize).canonicalizeCellLivenessData(); } for (size_t cellSize = impreciseStep; cellSize <= impreciseCutoff; cellSize += impreciseStep) { allocatorFor(cellSize).canonicalizeCellLivenessData(); normalDestructorAllocatorFor(cellSize).canonicalizeCellLivenessData(); immortalStructureDestructorAllocatorFor(cellSize).canonicalizeCellLivenessData(); } m_normalSpace.largeAllocator.canonicalizeCellLivenessData(); m_normalDestructorSpace.largeAllocator.canonicalizeCellLivenessData(); m_immortalStructureDestructorSpace.largeAllocator.canonicalizeCellLivenessData(); }
MarkedSpace::MarkedSpace(Heap* heap) : m_heap(heap) { for (size_t cellSize = preciseStep; cellSize <= preciseCutoff; cellSize += preciseStep) { allocatorFor(cellSize).init(heap, this, cellSize, MarkedBlock::None); normalDestructorAllocatorFor(cellSize).init(heap, this, cellSize, MarkedBlock::Normal); immortalStructureDestructorAllocatorFor(cellSize).init(heap, this, cellSize, MarkedBlock::ImmortalStructure); } for (size_t cellSize = impreciseStep; cellSize <= impreciseCutoff; cellSize += impreciseStep) { allocatorFor(cellSize).init(heap, this, cellSize, MarkedBlock::None); normalDestructorAllocatorFor(cellSize).init(heap, this, cellSize, MarkedBlock::Normal); immortalStructureDestructorAllocatorFor(cellSize).init(heap, this, cellSize, MarkedBlock::ImmortalStructure); } m_normalSpace.largeAllocator.init(heap, this, 0, MarkedBlock::None); m_normalDestructorSpace.largeAllocator.init(heap, this, 0, MarkedBlock::Normal); m_immortalStructureDestructorSpace.largeAllocator.init(heap, this, 0, MarkedBlock::ImmortalStructure); }
bool MarkedSpace::isPagedOut(double deadline) { for (size_t cellSize = preciseStep; cellSize <= preciseCutoff; cellSize += preciseStep) { if (allocatorFor(cellSize).isPagedOut(deadline) || normalDestructorAllocatorFor(cellSize).isPagedOut(deadline) || immortalStructureDestructorAllocatorFor(cellSize).isPagedOut(deadline)) return true; } for (size_t cellSize = impreciseStep; cellSize <= impreciseCutoff; cellSize += impreciseStep) { if (allocatorFor(cellSize).isPagedOut(deadline) || normalDestructorAllocatorFor(cellSize).isPagedOut(deadline) || immortalStructureDestructorAllocatorFor(cellSize).isPagedOut(deadline)) return true; } if (m_normalSpace.largeAllocator.isPagedOut(deadline) || m_normalDestructorSpace.largeAllocator.isPagedOut(deadline) || m_immortalStructureDestructorSpace.largeAllocator.isPagedOut(deadline)) return true; return false; }