| OLD | NEW |
| 1 // Copyright 2012 the V8 project authors. All rights reserved. | 1 // Copyright 2012 the V8 project authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "src/v8.h" | 5 #include "src/v8.h" |
| 6 | 6 |
| 7 #include "src/accessors.h" | 7 #include "src/accessors.h" |
| 8 #include "src/api.h" | 8 #include "src/api.h" |
| 9 #include "src/base/bits.h" | 9 #include "src/base/bits.h" |
| 10 #include "src/base/once.h" | 10 #include "src/base/once.h" |
| (...skipping 750 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 761 const int kMinNumberOfAttempts = 2; | 761 const int kMinNumberOfAttempts = 2; |
| 762 for (int attempt = 0; attempt < kMaxNumberOfAttempts; attempt++) { | 762 for (int attempt = 0; attempt < kMaxNumberOfAttempts; attempt++) { |
| 763 if (!CollectGarbage(MARK_COMPACTOR, gc_reason, NULL) && | 763 if (!CollectGarbage(MARK_COMPACTOR, gc_reason, NULL) && |
| 764 attempt + 1 >= kMinNumberOfAttempts) { | 764 attempt + 1 >= kMinNumberOfAttempts) { |
| 765 break; | 765 break; |
| 766 } | 766 } |
| 767 } | 767 } |
| 768 mark_compact_collector()->SetFlags(kNoGCFlags); | 768 mark_compact_collector()->SetFlags(kNoGCFlags); |
| 769 new_space_.Shrink(); | 769 new_space_.Shrink(); |
| 770 UncommitFromSpace(); | 770 UncommitFromSpace(); |
| 771 incremental_marking()->UncommitMarkingDeque(); | |
| 772 } | 771 } |
| 773 | 772 |
| 774 | 773 |
| 775 void Heap::EnsureFillerObjectAtTop() { | 774 void Heap::EnsureFillerObjectAtTop() { |
| 776 // There may be an allocation memento behind every object in new space. | 775 // There may be an allocation memento behind every object in new space. |
| 777 // If we evacuate a not full new space or if we are on the last page of | 776 // If we evacuate a not full new space or if we are on the last page of |
| 778 // the new space, then there may be uninitialized memory behind the top | 777 // the new space, then there may be uninitialized memory behind the top |
| 779 // pointer of the new space page. We store a filler object there to | 778 // pointer of the new space page. We store a filler object there to |
| 780 // identify the unused space. | 779 // identify the unused space. |
| 781 Address from_top = new_space_.top(); | 780 Address from_top = new_space_.top(); |
| (...skipping 344 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1126 | 1125 |
| 1127 // Update relocatables. | 1126 // Update relocatables. |
| 1128 Relocatable::PostGarbageCollectionProcessing(isolate_); | 1127 Relocatable::PostGarbageCollectionProcessing(isolate_); |
| 1129 | 1128 |
| 1130 if (collector == MARK_COMPACTOR) { | 1129 if (collector == MARK_COMPACTOR) { |
| 1131 // Register the amount of external allocated memory. | 1130 // Register the amount of external allocated memory. |
| 1132 amount_of_external_allocated_memory_at_last_global_gc_ = | 1131 amount_of_external_allocated_memory_at_last_global_gc_ = |
| 1133 amount_of_external_allocated_memory_; | 1132 amount_of_external_allocated_memory_; |
| 1134 old_generation_allocation_limit_ = OldGenerationAllocationLimit( | 1133 old_generation_allocation_limit_ = OldGenerationAllocationLimit( |
| 1135 PromotedSpaceSizeOfObjects(), freed_global_handles); | 1134 PromotedSpaceSizeOfObjects(), freed_global_handles); |
| 1135 // We finished a marking cycle. We can uncommit the marking deque until |
| 1136 // we start marking again. |
| 1137 mark_compact_collector_.UncommitMarkingDeque(); |
| 1136 } | 1138 } |
| 1137 | 1139 |
| 1138 { | 1140 { |
| 1139 GCCallbacksScope scope(this); | 1141 GCCallbacksScope scope(this); |
| 1140 if (scope.CheckReenter()) { | 1142 if (scope.CheckReenter()) { |
| 1141 AllowHeapAllocation allow_allocation; | 1143 AllowHeapAllocation allow_allocation; |
| 1142 GCTracer::Scope scope(tracer(), GCTracer::Scope::EXTERNAL); | 1144 GCTracer::Scope scope(tracer(), GCTracer::Scope::EXTERNAL); |
| 1143 VMState<EXTERNAL> state(isolate_); | 1145 VMState<EXTERNAL> state(isolate_); |
| 1144 HandleScope handle_scope(isolate_); | 1146 HandleScope handle_scope(isolate_); |
| 1145 CallGCEpilogueCallbacks(gc_type, gc_callback_flags); | 1147 CallGCEpilogueCallbacks(gc_type, gc_callback_flags); |
| (...skipping 3257 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 4403 new_space_.Shrink(); | 4405 new_space_.Shrink(); |
| 4404 UncommitFromSpace(); | 4406 UncommitFromSpace(); |
| 4405 } | 4407 } |
| 4406 } | 4408 } |
| 4407 | 4409 |
| 4408 | 4410 |
| 4409 void Heap::TryFinalizeIdleIncrementalMarking( | 4411 void Heap::TryFinalizeIdleIncrementalMarking( |
| 4410 double idle_time_in_ms, size_t size_of_objects, | 4412 double idle_time_in_ms, size_t size_of_objects, |
| 4411 size_t final_incremental_mark_compact_speed_in_bytes_per_ms) { | 4413 size_t final_incremental_mark_compact_speed_in_bytes_per_ms) { |
| 4412 if (incremental_marking()->IsComplete() || | 4414 if (incremental_marking()->IsComplete() || |
| 4413 (incremental_marking()->IsMarkingDequeEmpty() && | 4415 (mark_compact_collector_.marking_deque()->IsEmpty() && |
| 4414 gc_idle_time_handler_.ShouldDoFinalIncrementalMarkCompact( | 4416 gc_idle_time_handler_.ShouldDoFinalIncrementalMarkCompact( |
| 4415 static_cast<size_t>(idle_time_in_ms), size_of_objects, | 4417 static_cast<size_t>(idle_time_in_ms), size_of_objects, |
| 4416 final_incremental_mark_compact_speed_in_bytes_per_ms))) { | 4418 final_incremental_mark_compact_speed_in_bytes_per_ms))) { |
| 4417 CollectAllGarbage(kNoGCFlags, "idle notification: finalize incremental"); | 4419 CollectAllGarbage(kNoGCFlags, "idle notification: finalize incremental"); |
| 4418 } | 4420 } |
| 4419 } | 4421 } |
| 4420 | 4422 |
| 4421 | 4423 |
| 4422 bool Heap::WorthActivatingIncrementalMarking() { | 4424 bool Heap::WorthActivatingIncrementalMarking() { |
| 4423 return incremental_marking()->IsStopped() && | 4425 return incremental_marking()->IsStopped() && |
| (...skipping 1076 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 5500 property_cell_space_ = NULL; | 5502 property_cell_space_ = NULL; |
| 5501 } | 5503 } |
| 5502 | 5504 |
| 5503 if (lo_space_ != NULL) { | 5505 if (lo_space_ != NULL) { |
| 5504 lo_space_->TearDown(); | 5506 lo_space_->TearDown(); |
| 5505 delete lo_space_; | 5507 delete lo_space_; |
| 5506 lo_space_ = NULL; | 5508 lo_space_ = NULL; |
| 5507 } | 5509 } |
| 5508 | 5510 |
| 5509 store_buffer()->TearDown(); | 5511 store_buffer()->TearDown(); |
| 5510 incremental_marking()->TearDown(); | |
| 5511 | 5512 |
| 5512 isolate_->memory_allocator()->TearDown(); | 5513 isolate_->memory_allocator()->TearDown(); |
| 5513 } | 5514 } |
| 5514 | 5515 |
| 5515 | 5516 |
| 5516 void Heap::AddGCPrologueCallback(v8::Isolate::GCPrologueCallback callback, | 5517 void Heap::AddGCPrologueCallback(v8::Isolate::GCPrologueCallback callback, |
| 5517 GCType gc_type, bool pass_isolate) { | 5518 GCType gc_type, bool pass_isolate) { |
| 5518 DCHECK(callback != NULL); | 5519 DCHECK(callback != NULL); |
| 5519 GCPrologueCallbackPair pair(callback, gc_type, pass_isolate); | 5520 GCPrologueCallbackPair pair(callback, gc_type, pass_isolate); |
| 5520 DCHECK(!gc_prologue_callbacks_.Contains(pair)); | 5521 DCHECK(!gc_prologue_callbacks_.Contains(pair)); |
| (...skipping 847 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 6368 static_cast<int>(object_sizes_last_time_[index])); | 6369 static_cast<int>(object_sizes_last_time_[index])); |
| 6369 CODE_AGE_LIST_COMPLETE(ADJUST_LAST_TIME_OBJECT_COUNT) | 6370 CODE_AGE_LIST_COMPLETE(ADJUST_LAST_TIME_OBJECT_COUNT) |
| 6370 #undef ADJUST_LAST_TIME_OBJECT_COUNT | 6371 #undef ADJUST_LAST_TIME_OBJECT_COUNT |
| 6371 | 6372 |
| 6372 MemCopy(object_counts_last_time_, object_counts_, sizeof(object_counts_)); | 6373 MemCopy(object_counts_last_time_, object_counts_, sizeof(object_counts_)); |
| 6373 MemCopy(object_sizes_last_time_, object_sizes_, sizeof(object_sizes_)); | 6374 MemCopy(object_sizes_last_time_, object_sizes_, sizeof(object_sizes_)); |
| 6374 ClearObjectStats(); | 6375 ClearObjectStats(); |
| 6375 } | 6376 } |
| 6376 } | 6377 } |
| 6377 } // namespace v8::internal | 6378 } // namespace v8::internal |
| OLD | NEW |