Index: src/heap/mark-compact.h |
diff --git a/src/heap/mark-compact.h b/src/heap/mark-compact.h |
index ddb993f5a2f676491e732da2a1a39cae26c48b59..3ffeeed7b17aa2961ca9a48e7544b685aae8736f 100644 |
--- a/src/heap/mark-compact.h |
+++ b/src/heap/mark-compact.h |
@@ -363,6 +363,15 @@ class SlotsBuffer { |
SlotsBuffer** buffer_address, SlotType type, Address addr, |
AdditionMode mode); |
+ // Eliminates all stale entries from the slots buffer, i.e., slots that |
+ // are not part of live objects anymore. This method must be called after |
+ // marking, when the whole transitive closure is known and must be called |
+ // before sweeping when mark bits are still intact. |
+ static void RemoveInvalidSlots(Heap* heap, SlotsBuffer* buffer); |
+ |
+ // Ensures that there are no invalid slots in the chain of slots buffers. |
+ static void VerifySlots(Heap* heap, SlotsBuffer* buffer); |
+ |
static const int kNumberOfElements = 1021; |
private: |
@@ -679,10 +688,10 @@ class MarkCompactCollector { |
// The following four methods can just be called after marking, when the |
// whole transitive closure is known. They must be called before sweeping |
// when mark bits are still intact. |
- bool IsSlotInBlackObject(Page* p, Address slot); |
+ bool IsSlotInBlackObject(Page* p, Address slot, HeapObject** out_object); |
bool IsSlotInBlackObjectSlow(Page* p, Address slot); |
- bool IsSlotInLiveObject(HeapObject** address, HeapObject* object); |
- void VerifyIsSlotInLiveObject(HeapObject** address, HeapObject* object); |
+ bool IsSlotInLiveObject(Address slot); |
+ void VerifyIsSlotInLiveObject(Address slot, HeapObject* object); |
private: |
class SweeperTask; |
@@ -694,6 +703,8 @@ class MarkCompactCollector { |
bool WillBeDeoptimized(Code* code); |
void RemoveDeadInvalidatedCode(); |
void ProcessInvalidatedCode(ObjectVisitor* visitor); |
+ void ClearInvalidSlotsBufferEntries(PagedSpace* space); |
+ void ClearInvalidStoreAndSlotsBufferEntries(); |
void StartSweeperThreads(); |