Precisely sweep scan on scavenge pages and use heap iterator to iterate over them.
BUG= R=jarin@chromium.org Review URL: https://codereview.chromium.org/362313002 git-svn-id: https://v8.googlecode.com/svn/branches/bleeding_edge@22154 ce2b1a6d-e550-0410-aec6-3dcde31c8c00
This commit is contained in:
parent
be0d2fbe1f
commit
4793ec3b7e
@ -4146,12 +4146,23 @@ void MarkCompactCollector::SweepSpace(PagedSpace* space, SweeperType sweeper) {
|
|||||||
pages_swept++;
|
pages_swept++;
|
||||||
parallel_sweeping_active = true;
|
parallel_sweeping_active = true;
|
||||||
} else {
|
} else {
|
||||||
if (FLAG_gc_verbose) {
|
if (p->scan_on_scavenge()) {
|
||||||
PrintF("Sweeping 0x%" V8PRIxPTR " conservatively in parallel.\n",
|
SweepPrecisely<SWEEP_ONLY, IGNORE_SKIP_LIST, IGNORE_FREE_SPACE>(
|
||||||
reinterpret_cast<intptr_t>(p));
|
space, p, NULL);
|
||||||
|
pages_swept++;
|
||||||
|
if (FLAG_gc_verbose) {
|
||||||
|
PrintF("Sweeping 0x%" V8PRIxPTR
|
||||||
|
" scan on scavenge page precisely.\n",
|
||||||
|
reinterpret_cast<intptr_t>(p));
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
if (FLAG_gc_verbose) {
|
||||||
|
PrintF("Sweeping 0x%" V8PRIxPTR " conservatively in parallel.\n",
|
||||||
|
reinterpret_cast<intptr_t>(p));
|
||||||
|
}
|
||||||
|
p->set_parallel_sweeping(MemoryChunk::PARALLEL_SWEEPING_PENDING);
|
||||||
|
space->IncreaseUnsweptFreeBytes(p);
|
||||||
}
|
}
|
||||||
p->set_parallel_sweeping(MemoryChunk::PARALLEL_SWEEPING_PENDING);
|
|
||||||
space->IncreaseUnsweptFreeBytes(p);
|
|
||||||
}
|
}
|
||||||
space->set_end_of_unswept_pages(p);
|
space->set_end_of_unswept_pages(p);
|
||||||
break;
|
break;
|
||||||
|
@ -552,8 +552,21 @@ void StoreBuffer::IteratePointersToNewSpace(ObjectSlotCallback slot_callback,
|
|||||||
FindPointersToNewSpaceInMapsRegion(
|
FindPointersToNewSpaceInMapsRegion(
|
||||||
start, end, slot_callback, clear_maps);
|
start, end, slot_callback, clear_maps);
|
||||||
} else {
|
} else {
|
||||||
FindPointersToNewSpaceInRegion(
|
ASSERT(page->WasSweptPrecisely());
|
||||||
start, end, slot_callback, clear_maps);
|
HeapObjectIterator iterator(page, NULL);
|
||||||
|
for (HeapObject* heap_object = iterator.Next();
|
||||||
|
heap_object != NULL;
|
||||||
|
heap_object = iterator.Next()) {
|
||||||
|
// We skip filler, free space, and constant pool objects.
|
||||||
|
if (!heap_object->IsFiller() &&
|
||||||
|
!heap_object->IsConstantPoolArray()) {
|
||||||
|
FindPointersToNewSpaceInRegion(
|
||||||
|
heap_object->address() + HeapObject::kHeaderSize,
|
||||||
|
heap_object->address() + heap_object->Size(),
|
||||||
|
slot_callback,
|
||||||
|
clear_maps);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user