| Index: src/mark-compact.cc
|
| diff --git a/src/mark-compact.cc b/src/mark-compact.cc
|
| index e7a26194e99f3231451fc70ab39ab1397b57993b..e84e529fc4f54c517125a292cff998482caf6c2e 100644
|
| --- a/src/mark-compact.cc
|
| +++ b/src/mark-compact.cc
|
| @@ -1627,7 +1627,7 @@ static void SweepNewSpace(NewSpace* space) {
|
| }
|
|
|
|
|
| -static void SweepSpace(PagedSpace* space, DeallocateFunction dealloc) {
|
| +static void SweepSpace(PagedSpace* space) {
|
| PageIterator it(space, PageIterator::PAGES_IN_USE);
|
|
|
| // During sweeping of paged space we are trying to find longest sequences
|
| @@ -1668,10 +1668,9 @@ static void SweepSpace(PagedSpace* space, DeallocateFunction dealloc) {
|
| MarkCompactCollector::tracer()->decrement_marked_count();
|
|
|
| if (!is_previous_alive) { // Transition from free to live.
|
| - dealloc(free_start,
|
| - static_cast<int>(current - free_start),
|
| - true,
|
| - false);
|
| + space->DeallocateBlock(free_start,
|
| + static_cast<int>(current - free_start),
|
| + true);
|
| is_previous_alive = true;
|
| }
|
| } else {
|
| @@ -1701,7 +1700,7 @@ static void SweepSpace(PagedSpace* space, DeallocateFunction dealloc) {
|
| // without putting anything into free list.
|
| int size_in_bytes = static_cast<int>(p->AllocationTop() - free_start);
|
| if (size_in_bytes > 0) {
|
| - dealloc(free_start, size_in_bytes, false, true);
|
| + space->DeallocateBlock(free_start, size_in_bytes, false);
|
| }
|
| }
|
| } else {
|
| @@ -1717,7 +1716,7 @@ static void SweepSpace(PagedSpace* space, DeallocateFunction dealloc) {
|
| if (last_free_size > 0) {
|
| Page::FromAddress(last_free_start)->
|
| SetAllocationWatermark(last_free_start);
|
| - dealloc(last_free_start, last_free_size, true, true);
|
| + space->DeallocateBlock(last_free_start, last_free_size, true);
|
| last_free_start = NULL;
|
| last_free_size = 0;
|
| }
|
| @@ -1748,7 +1747,7 @@ static void SweepSpace(PagedSpace* space, DeallocateFunction dealloc) {
|
| // There was a free ending area on the previous page.
|
| // Deallocate it without putting it into freelist and move allocation
|
| // top to the beginning of this free area.
|
| - dealloc(last_free_start, last_free_size, false, true);
|
| + space->DeallocateBlock(last_free_start, last_free_size, false);
|
| new_allocation_top = last_free_start;
|
| }
|
|
|
| @@ -1769,61 +1768,6 @@ static void SweepSpace(PagedSpace* space, DeallocateFunction dealloc) {
|
| }
|
|
|
|
|
| -void MarkCompactCollector::DeallocateOldPointerBlock(Address start,
|
| - int size_in_bytes,
|
| - bool add_to_freelist,
|
| - bool last_on_page) {
|
| - Heap::old_pointer_space()->Free(start, size_in_bytes, add_to_freelist);
|
| -}
|
| -
|
| -
|
| -void MarkCompactCollector::DeallocateOldDataBlock(Address start,
|
| - int size_in_bytes,
|
| - bool add_to_freelist,
|
| - bool last_on_page) {
|
| - Heap::old_data_space()->Free(start, size_in_bytes, add_to_freelist);
|
| -}
|
| -
|
| -
|
| -void MarkCompactCollector::DeallocateCodeBlock(Address start,
|
| - int size_in_bytes,
|
| - bool add_to_freelist,
|
| - bool last_on_page) {
|
| - Heap::code_space()->Free(start, size_in_bytes, add_to_freelist);
|
| -}
|
| -
|
| -
|
| -void MarkCompactCollector::DeallocateMapBlock(Address start,
|
| - int size_in_bytes,
|
| - bool add_to_freelist,
|
| - bool last_on_page) {
|
| - // Objects in map space are assumed to have size Map::kSize and a
|
| - // valid map in their first word. Thus, we break the free block up into
|
| - // chunks and free them separately.
|
| - ASSERT(size_in_bytes % Map::kSize == 0);
|
| - Address end = start + size_in_bytes;
|
| - for (Address a = start; a < end; a += Map::kSize) {
|
| - Heap::map_space()->Free(a, add_to_freelist);
|
| - }
|
| -}
|
| -
|
| -
|
| -void MarkCompactCollector::DeallocateCellBlock(Address start,
|
| - int size_in_bytes,
|
| - bool add_to_freelist,
|
| - bool last_on_page) {
|
| - // Free-list elements in cell space are assumed to have a fixed size.
|
| - // We break the free block into chunks and add them to the free list
|
| - // individually.
|
| - int size = Heap::cell_space()->object_size_in_bytes();
|
| - ASSERT(size_in_bytes % size == 0);
|
| - Address end = start + size_in_bytes;
|
| - for (Address a = start; a < end; a += size) {
|
| - Heap::cell_space()->Free(a, add_to_freelist);
|
| - }
|
| -}
|
| -
|
| -
|
| void MarkCompactCollector::EncodeForwardingAddresses() {
|
| ASSERT(state_ == ENCODE_FORWARDING_ADDRESSES);
|
| // Objects in the active semispace of the young generation may be
|
| @@ -2088,14 +2032,14 @@ void MarkCompactCollector::SweepSpaces() {
|
| // the map space last because freeing non-live maps overwrites them and
|
| // the other spaces rely on possibly non-live maps to get the sizes for
|
| // non-live objects.
|
| - SweepSpace(Heap::old_pointer_space(), &DeallocateOldPointerBlock);
|
| - SweepSpace(Heap::old_data_space(), &DeallocateOldDataBlock);
|
| - SweepSpace(Heap::code_space(), &DeallocateCodeBlock);
|
| - SweepSpace(Heap::cell_space(), &DeallocateCellBlock);
|
| + SweepSpace(Heap::old_pointer_space());
|
| + SweepSpace(Heap::old_data_space());
|
| + SweepSpace(Heap::code_space());
|
| + SweepSpace(Heap::cell_space());
|
| { GCTracer::Scope gc_scope(tracer_, GCTracer::Scope::MC_SWEEP_NEWSPACE);
|
| SweepNewSpace(Heap::new_space());
|
| }
|
| - SweepSpace(Heap::map_space(), &DeallocateMapBlock);
|
| + SweepSpace(Heap::map_space());
|
|
|
| Heap::IterateDirtyRegions(Heap::map_space(),
|
| &Heap::IteratePointersInDirtyMapsRegion,
|
|
|