| OLD | NEW |
| 1 // Copyright 2009 the V8 project authors. All rights reserved. | 1 // Copyright 2009 the V8 project authors. All rights reserved. |
| 2 // Redistribution and use in source and binary forms, with or without | 2 // Redistribution and use in source and binary forms, with or without |
| 3 // modification, are permitted provided that the following conditions are | 3 // modification, are permitted provided that the following conditions are |
| 4 // met: | 4 // met: |
| 5 // | 5 // |
| 6 // * Redistributions of source code must retain the above copyright | 6 // * Redistributions of source code must retain the above copyright |
| 7 // notice, this list of conditions and the following disclaimer. | 7 // notice, this list of conditions and the following disclaimer. |
| 8 // * Redistributions in binary form must reproduce the above | 8 // * Redistributions in binary form must reproduce the above |
| 9 // copyright notice, this list of conditions and the following | 9 // copyright notice, this list of conditions and the following |
| 10 // disclaimer in the documentation and/or other materials provided | 10 // disclaimer in the documentation and/or other materials provided |
| (...skipping 2777 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2788 AllocationSpace space = | 2788 AllocationSpace space = |
| 2789 (size > MaxObjectSizeInPagedSpace()) ? LO_SPACE : OLD_POINTER_SPACE; | 2789 (size > MaxObjectSizeInPagedSpace()) ? LO_SPACE : OLD_POINTER_SPACE; |
| 2790 Object* result = Heap::Allocate(map, space); | 2790 Object* result = Heap::Allocate(map, space); |
| 2791 if (result->IsFailure()) return result; | 2791 if (result->IsFailure()) return result; |
| 2792 Struct::cast(result)->InitializeBody(size); | 2792 Struct::cast(result)->InitializeBody(size); |
| 2793 return result; | 2793 return result; |
| 2794 } | 2794 } |
| 2795 | 2795 |
| 2796 | 2796 |
| 2797 bool Heap::IdleNotification() { | 2797 bool Heap::IdleNotification() { |
| 2798 static const int kIdlesBeforeCollection = 7; | 2798 static const int kIdlesBeforeScavenge = 4; |
| 2799 static const int kIdlesBeforeMarkSweep = 7; |
| 2800 static const int kIdlesBeforeMarkCompact = 8; |
| 2799 static int number_idle_notifications = 0; | 2801 static int number_idle_notifications = 0; |
| 2800 static int last_gc_count = gc_count_; | 2802 static int last_gc_count = gc_count_; |
| 2801 | 2803 |
| 2802 bool finished = false; | 2804 bool finished = false; |
| 2803 | 2805 |
| 2804 if (last_gc_count == gc_count_) { | 2806 if (last_gc_count == gc_count_) { |
| 2805 number_idle_notifications++; | 2807 number_idle_notifications++; |
| 2806 } else { | 2808 } else { |
| 2807 number_idle_notifications = 0; | 2809 number_idle_notifications = 0; |
| 2808 last_gc_count = gc_count_; | 2810 last_gc_count = gc_count_; |
| 2809 } | 2811 } |
| 2810 | 2812 |
| 2811 if (number_idle_notifications >= kIdlesBeforeCollection) { | 2813 if (number_idle_notifications == kIdlesBeforeScavenge) { |
| 2812 // The first time through we collect without forcing compaction. | 2814 CollectGarbage(0, NEW_SPACE); |
| 2813 // The second time through we force compaction and quit. | 2815 new_space_.Shrink(); |
| 2814 bool force_compaction = | |
| 2815 number_idle_notifications > kIdlesBeforeCollection; | |
| 2816 CollectAllGarbage(force_compaction); | |
| 2817 last_gc_count = gc_count_; | 2816 last_gc_count = gc_count_; |
| 2818 if (force_compaction) { | 2817 |
| 2819 // Shrink new space. | 2818 } else if (number_idle_notifications == kIdlesBeforeMarkSweep) { |
| 2820 new_space_.Shrink(); | 2819 CollectAllGarbage(false); |
| 2821 number_idle_notifications = 0; | 2820 new_space_.Shrink(); |
| 2822 finished = true; | 2821 last_gc_count = gc_count_; |
| 2823 } | 2822 |
| 2823 } else if (number_idle_notifications == kIdlesBeforeMarkCompact) { |
| 2824 CollectAllGarbage(true); |
| 2825 new_space_.Shrink(); |
| 2826 last_gc_count = gc_count_; |
| 2827 number_idle_notifications = 0; |
| 2828 finished = true; |
| 2824 } | 2829 } |
| 2825 | 2830 |
| 2826 // Uncommit unused memory in new space. | 2831 // Uncommit unused memory in new space. |
| 2827 Heap::UncommitFromSpace(); | 2832 Heap::UncommitFromSpace(); |
| 2828 return finished; | 2833 return finished; |
| 2829 } | 2834 } |
| 2830 | 2835 |
| 2831 | 2836 |
| 2832 #ifdef DEBUG | 2837 #ifdef DEBUG |
| 2833 | 2838 |
| (...skipping 1159 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3993 for (int i = 0; i < kNumberOfCaches; i++) { | 3998 for (int i = 0; i < kNumberOfCaches; i++) { |
| 3994 if (caches_[i] != NULL) { | 3999 if (caches_[i] != NULL) { |
| 3995 delete caches_[i]; | 4000 delete caches_[i]; |
| 3996 caches_[i] = NULL; | 4001 caches_[i] = NULL; |
| 3997 } | 4002 } |
| 3998 } | 4003 } |
| 3999 } | 4004 } |
| 4000 | 4005 |
| 4001 | 4006 |
| 4002 } } // namespace v8::internal | 4007 } } // namespace v8::internal |
| OLD | NEW |