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/heap/heap.h" | 5 #include "src/heap/heap.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/ast/context-slot-cache.h" | 9 #include "src/ast/context-slot-cache.h" |
10 #include "src/base/bits.h" | 10 #include "src/base/bits.h" |
(...skipping 405 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
416 isolate()->CountUsage(static_cast<v8::Isolate::UseCounterFeature>(i)); | 416 isolate()->CountUsage(static_cast<v8::Isolate::UseCounterFeature>(i)); |
417 } | 417 } |
418 } | 418 } |
419 } | 419 } |
420 | 420 |
421 | 421 |
422 void Heap::IncrementDeferredCount(v8::Isolate::UseCounterFeature feature) { | 422 void Heap::IncrementDeferredCount(v8::Isolate::UseCounterFeature feature) { |
423 deferred_counters_[feature]++; | 423 deferred_counters_[feature]++; |
424 } | 424 } |
425 | 425 |
| 426 bool Heap::UncommitFromSpace() { return new_space_.UncommitFromSpace(); } |
426 | 427 |
427 void Heap::GarbageCollectionPrologue() { | 428 void Heap::GarbageCollectionPrologue() { |
428 { | 429 { |
429 AllowHeapAllocation for_the_first_part_of_prologue; | 430 AllowHeapAllocation for_the_first_part_of_prologue; |
430 gc_count_++; | 431 gc_count_++; |
431 | 432 |
432 #ifdef VERIFY_HEAP | 433 #ifdef VERIFY_HEAP |
433 if (FLAG_verify_heap) { | 434 if (FLAG_verify_heap) { |
434 Verify(); | 435 Verify(); |
435 } | 436 } |
(...skipping 4772 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
5208 intptr_t old_gen_size) { | 5209 intptr_t old_gen_size) { |
5209 CHECK(factor > 1.0); | 5210 CHECK(factor > 1.0); |
5210 CHECK(old_gen_size > 0); | 5211 CHECK(old_gen_size > 0); |
5211 intptr_t limit = static_cast<intptr_t>(old_gen_size * factor); | 5212 intptr_t limit = static_cast<intptr_t>(old_gen_size * factor); |
5212 limit = Max(limit, old_gen_size + MinimumAllocationLimitGrowingStep()); | 5213 limit = Max(limit, old_gen_size + MinimumAllocationLimitGrowingStep()); |
5213 limit += new_space_.Capacity(); | 5214 limit += new_space_.Capacity(); |
5214 intptr_t halfway_to_the_max = (old_gen_size + max_old_generation_size_) / 2; | 5215 intptr_t halfway_to_the_max = (old_gen_size + max_old_generation_size_) / 2; |
5215 return Min(limit, halfway_to_the_max); | 5216 return Min(limit, halfway_to_the_max); |
5216 } | 5217 } |
5217 | 5218 |
| 5219 intptr_t Heap::MinimumAllocationLimitGrowingStep() { |
| 5220 const double kRegularAllocationLimitGrowingStep = 8; |
| 5221 const double kLowMemoryAllocationLimitGrowingStep = 2; |
| 5222 intptr_t limit = (Page::kPageSize > MB ? Page::kPageSize : MB); |
| 5223 return limit * (ShouldOptimizeForMemoryUsage() |
| 5224 ? kLowMemoryAllocationLimitGrowingStep |
| 5225 : kRegularAllocationLimitGrowingStep); |
| 5226 } |
5218 | 5227 |
5219 void Heap::SetOldGenerationAllocationLimit(intptr_t old_gen_size, | 5228 void Heap::SetOldGenerationAllocationLimit(intptr_t old_gen_size, |
5220 double gc_speed, | 5229 double gc_speed, |
5221 double mutator_speed) { | 5230 double mutator_speed) { |
5222 double factor = HeapGrowingFactor(gc_speed, mutator_speed); | 5231 double factor = HeapGrowingFactor(gc_speed, mutator_speed); |
5223 | 5232 |
5224 if (FLAG_trace_gc_verbose) { | 5233 if (FLAG_trace_gc_verbose) { |
5225 isolate_->PrintWithTimestamp( | 5234 isolate_->PrintWithTimestamp( |
5226 "Heap growing factor %.1f based on mu=%.3f, speed_ratio=%.f " | 5235 "Heap growing factor %.1f based on mu=%.3f, speed_ratio=%.f " |
5227 "(gc=%.f, mutator=%.f)\n", | 5236 "(gc=%.f, mutator=%.f)\n", |
(...skipping 1299 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
6527 } | 6536 } |
6528 | 6537 |
6529 | 6538 |
6530 // static | 6539 // static |
6531 int Heap::GetStaticVisitorIdForMap(Map* map) { | 6540 int Heap::GetStaticVisitorIdForMap(Map* map) { |
6532 return StaticVisitorBase::GetVisitorId(map); | 6541 return StaticVisitorBase::GetVisitorId(map); |
6533 } | 6542 } |
6534 | 6543 |
6535 } // namespace internal | 6544 } // namespace internal |
6536 } // namespace v8 | 6545 } // namespace v8 |
OLD | NEW |