Index: src/mark-compact.cc |
diff --git a/src/mark-compact.cc b/src/mark-compact.cc |
index 8846f19bb0dbaeec80192bf9709b3e3f1029cf2c..5ad18a6b3c6a6ea6ee23a1e81e886afa48a4999f 100644 |
--- a/src/mark-compact.cc |
+++ b/src/mark-compact.cc |
@@ -4145,12 +4145,23 @@ void MarkCompactCollector::SweepSpace(PagedSpace* space, SweeperType sweeper) { |
pages_swept++; |
parallel_sweeping_active = true; |
} else { |
- if (FLAG_gc_verbose) { |
- PrintF("Sweeping 0x%" V8PRIxPTR " conservatively in parallel.\n", |
- reinterpret_cast<intptr_t>(p)); |
+ if (p->scan_on_scavenge()) { |
+ SweepPrecisely<SWEEP_ONLY, IGNORE_SKIP_LIST, IGNORE_FREE_SPACE>( |
+ 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); |
break; |