| 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.
|
|
|