Reviewers: Kasper Lund, Description: Minor change to idle notification handling: perform a scavenge followed by shrinking of new space earlier.
Please review this at http://codereview.chromium.org/199057 SVN Base: http://v8.googlecode.com/svn/branches/bleeding_edge/ Affected files: M src/heap.cc Index: src/heap.cc =================================================================== --- src/heap.cc (revision 2857) +++ src/heap.cc (working copy) @@ -2795,7 +2795,9 @@ bool Heap::IdleNotification() { - static const int kIdlesBeforeCollection = 7; + static const int kIdlesBeforeScavenge = 4; + static const int kIdlesBeforeMarkSweep = 7; + static const int kIdlesBeforeMarkCompact = 8; static int number_idle_notifications = 0; static int last_gc_count = gc_count_; @@ -2808,19 +2810,22 @@ last_gc_count = gc_count_; } - if (number_idle_notifications >= kIdlesBeforeCollection) { - // The first time through we collect without forcing compaction. - // The second time through we force compaction and quit. - bool force_compaction = - number_idle_notifications > kIdlesBeforeCollection; - CollectAllGarbage(force_compaction); + if (number_idle_notifications == kIdlesBeforeScavenge) { + CollectGarbage(0, NEW_SPACE); + new_space_.Shrink(); last_gc_count = gc_count_; - if (force_compaction) { - // Shrink new space. - new_space_.Shrink(); - number_idle_notifications = 0; - finished = true; - } + + } else if (number_idle_notifications == kIdlesBeforeMarkSweep) { + CollectAllGarbage(false); + new_space_.Shrink(); + last_gc_count = gc_count_; + + } else if (number_idle_notifications == kIdlesBeforeMarkCompact) { + CollectAllGarbage(true); + new_space_.Shrink(); + last_gc_count = gc_count_; + number_idle_notifications = 0; + finished = true; } // Uncommit unused memory in new space. --~--~---------~--~----~------------~-------~--~----~ v8-dev mailing list [email protected] http://groups.google.com/group/v8-dev -~----------~----~----~----~------~----~------~--~---
