| Index: src/mark-compact.h
|
| diff --git a/src/mark-compact.h b/src/mark-compact.h
|
| index 3950e7538bfdaf48531223942cee901b59d9a5fa..1d289a75928aefa8fba0c6b2914e03a4769bd376 100644
|
| --- a/src/mark-compact.h
|
| +++ b/src/mark-compact.h
|
| @@ -41,7 +41,8 @@ typedef bool (*IsAliveFunction)(HeapObject* obj, int* size, int* offset);
|
| // no attempt to add area to free list is made.
|
| typedef void (*DeallocateFunction)(Address start,
|
| int size_in_bytes,
|
| - bool add_to_freelist);
|
| + bool add_to_freelist,
|
| + bool last_on_page);
|
|
|
|
|
| // Forward declarations.
|
| @@ -131,8 +132,7 @@ class MarkCompactCollector: public AllStatic {
|
| SWEEP_SPACES,
|
| ENCODE_FORWARDING_ADDRESSES,
|
| UPDATE_POINTERS,
|
| - RELOCATE_OBJECTS,
|
| - REBUILD_RSETS
|
| + RELOCATE_OBJECTS
|
| };
|
|
|
| // The current stage of the collector.
|
| @@ -269,22 +269,22 @@ class MarkCompactCollector: public AllStatic {
|
| // written to their map word's offset in the inactive
|
| // semispace.
|
| //
|
| - // Bookkeeping data is written to the remembered-set are of
|
| + // Bookkeeping data is written to the page header of
|
| // eached paged-space page that contains live objects after
|
| // compaction:
|
| //
|
| - // The 3rd word of the page (first word of the remembered
|
| - // set) contains the relocation top address, the address of
|
| - // the first word after the end of the last live object in
|
| - // the page after compaction.
|
| + // The allocation watermark field is used to track the
|
| + // relocation top address, the address of the first word
|
| + // after the end of the last live object in the page after
|
| + // compaction.
|
| //
|
| - // The 4th word contains the zero-based index of the page in
|
| - // its space. This word is only used for map space pages, in
|
| + // The Page::mc_page_index field contains the zero-based index of the
|
| + // page in its space. This word is only used for map space pages, in
|
| // order to encode the map addresses in 21 bits to free 11
|
| // bits per map word for the forwarding address.
|
| //
|
| - // The 5th word contains the (nonencoded) forwarding address
|
| - // of the first live object in the page.
|
| + // The Page::mc_first_forwarded field contains the (nonencoded)
|
| + // forwarding address of the first live object in the page.
|
| //
|
| // In both the new space and the paged spaces, a linked list
|
| // of live regions is constructructed (linked through
|
| @@ -319,23 +319,28 @@ class MarkCompactCollector: public AllStatic {
|
| // generation.
|
| static void DeallocateOldPointerBlock(Address start,
|
| int size_in_bytes,
|
| - bool add_to_freelist);
|
| + bool add_to_freelist,
|
| + bool last_on_page);
|
|
|
| static void DeallocateOldDataBlock(Address start,
|
| int size_in_bytes,
|
| - bool add_to_freelist);
|
| + bool add_to_freelist,
|
| + bool last_on_page);
|
|
|
| static void DeallocateCodeBlock(Address start,
|
| int size_in_bytes,
|
| - bool add_to_freelist);
|
| + bool add_to_freelist,
|
| + bool last_on_page);
|
|
|
| static void DeallocateMapBlock(Address start,
|
| int size_in_bytes,
|
| - bool add_to_freelist);
|
| + bool add_to_freelist,
|
| + bool last_on_page);
|
|
|
| static void DeallocateCellBlock(Address start,
|
| int size_in_bytes,
|
| - bool add_to_freelist);
|
| + bool add_to_freelist,
|
| + bool last_on_page);
|
|
|
| // If we are not compacting the heap, we simply sweep the spaces except
|
| // for the large object space, clearing mark bits and adding unmarked
|
| @@ -349,9 +354,7 @@ class MarkCompactCollector: public AllStatic {
|
| //
|
| // After: All pointers in live objects, including encoded map
|
| // pointers, are updated to point to their target's new
|
| - // location. The remembered set area of each paged-space
|
| - // page containing live objects still contains bookkeeping
|
| - // information.
|
| + // location.
|
|
|
| friend class UpdatingVisitor; // helper for updating visited objects
|
|
|
| @@ -373,13 +376,9 @@ class MarkCompactCollector: public AllStatic {
|
| // Phase 4: Relocating objects.
|
| //
|
| // Before: Pointers to live objects are updated to point to their
|
| - // target's new location. The remembered set area of each
|
| - // paged-space page containing live objects still contains
|
| - // bookkeeping information.
|
| + // target's new location.
|
| //
|
| - // After: Objects have been moved to their new addresses. The
|
| - // remembered set area of each paged-space page containing
|
| - // live objects still contains bookkeeping information.
|
| + // After: Objects have been moved to their new addresses.
|
|
|
| // Relocates objects in all spaces.
|
| static void RelocateObjects();
|
| @@ -408,17 +407,6 @@ class MarkCompactCollector: public AllStatic {
|
| // Copy a new object.
|
| static int RelocateNewObject(HeapObject* obj);
|
|
|
| - // -----------------------------------------------------------------------
|
| - // Phase 5: Rebuilding remembered sets.
|
| - //
|
| - // Before: The heap is in a normal state except that remembered sets
|
| - // in the paged spaces are not correct.
|
| - //
|
| - // After: The heap is in a normal state.
|
| -
|
| - // Rebuild remembered set in old and map spaces.
|
| - static void RebuildRSets();
|
| -
|
| #ifdef DEBUG
|
| // -----------------------------------------------------------------------
|
| // Debugging variables, functions and classes
|
|
|