From 0adf83b10d71da8351a076a161a20623447d5520 Mon Sep 17 00:00:00 2001 From: "bak@chromium.org" Date: Fri, 26 Feb 2010 11:48:18 +0000 Subject: [PATCH] - Moved the computation of old space limits to after the mandatory scavenge. This reduces the number of mark sweep operations. Review URL: http://codereview.chromium.org/661175 git-svn-id: http://v8.googlecode.com/svn/branches/bleeding_edge@3969 ce2b1a6d-e550-0410-aec6-3dcde31c8c00 --- src/heap.cc | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/src/heap.cc b/src/heap.cc index 20db826ed..15e1b9786 100644 --- a/src/heap.cc +++ b/src/heap.cc @@ -562,9 +562,18 @@ void Heap::PerformGarbageCollection(AllocationSpace space, global_gc_prologue_callback_(); } EnsureFromSpaceIsCommitted(); + + // Perform mark-sweep with optional compaction. if (collector == MARK_COMPACTOR) { MarkCompact(tracer); + } + + // Always perform a scavenge to make room in new space. + Scavenge(); + // Update the old space promotion limits after the scavenge due to + // promotions during scavenge. + if (collector == MARK_COMPACTOR) { int old_gen_size = PromotedSpaceSize(); old_gen_promotion_limit_ = old_gen_size + Max(kMinimumPromotionLimit, old_gen_size / 3); @@ -572,7 +581,6 @@ void Heap::PerformGarbageCollection(AllocationSpace space, old_gen_size + Max(kMinimumAllocationLimit, old_gen_size / 2); old_gen_exhausted_ = false; } - Scavenge(); Counters::objs_since_last_young.Set(0); @@ -1673,7 +1681,7 @@ Object* Heap::InitializeNumberStringCache() { // max_semispace_size_ == 8 MB => number_string_cache_size = 16KB. int number_string_cache_size = max_semispace_size_ / 512; number_string_cache_size = Max(32, Min(16*KB, number_string_cache_size)); - Object* obj = AllocateFixedArray(number_string_cache_size * 2); + Object* obj = AllocateFixedArray(number_string_cache_size * 2, TENURED); if (!obj->IsFailure()) set_number_string_cache(FixedArray::cast(obj)); return obj; } -- 2.34.1