Chromium Code Reviews| Index: src/heap/heap.cc |
| diff --git a/src/heap/heap.cc b/src/heap/heap.cc |
| index ec48b324479b6bd90b66fd5af7c728f03e5ac804..c8e40b00c5c2cd178f2f2962b9997ac32aeffe7a 100644 |
| --- a/src/heap/heap.cc |
| +++ b/src/heap/heap.cc |
| @@ -1283,16 +1283,18 @@ bool Heap::PerformGarbageCollection( |
| // Update relocatables. |
| Relocatable::PostGarbageCollectionProcessing(isolate_); |
| + double gc_speed = tracer()->CombinedMarkCompactSpeedInBytesPerMillisecond(); |
| + double mutator_speed = static_cast<double>( |
| + tracer() |
| + ->CurrentOldGenerationAllocationThroughputInBytesPerMillisecond()); |
| + intptr_t old_gen_size = PromotedSpaceSizeOfObjects(); |
| if (collector == MARK_COMPACTOR) { |
| // Register the amount of external allocated memory. |
| amount_of_external_allocated_memory_at_last_global_gc_ = |
| amount_of_external_allocated_memory_; |
| - double gc_speed = tracer()->CombinedMarkCompactSpeedInBytesPerMillisecond(); |
| - double mutator_speed = static_cast<double>( |
| - tracer() |
| - ->CurrentOldGenerationAllocationThroughputInBytesPerMillisecond()); |
| - intptr_t old_gen_size = PromotedSpaceSizeOfObjects(); |
| SetOldGenerationAllocationLimit(old_gen_size, gc_speed, mutator_speed); |
| + } else if (HasLowYoungGenerationAllocationRate()) { |
| + DampenOldGenerationAllocationLimit(old_gen_size, gc_speed, mutator_speed); |
| } |
| { |
| @@ -5575,6 +5577,23 @@ void Heap::SetOldGenerationAllocationLimit(intptr_t old_gen_size, |
| } |
| +void Heap::DampenOldGenerationAllocationLimit(intptr_t old_gen_size, |
| + double gc_speed, |
| + double mutator_speed) { |
| + double factor = HeapGrowingFactor(gc_speed, mutator_speed); |
| + intptr_t limit = CalculateOldGenerationAllocationLimit(factor, old_gen_size); |
| + if (limit < old_generation_allocation_limit_) { |
| + old_generation_allocation_limit_ = limit; |
| + if (FLAG_trace_gc_verbose) { |
| + PrintIsolate(isolate_, "Dampen: old size: %" V8_PTR_PREFIX |
|
Hannes Payer (out of office)
2015/06/16 22:29:21
old limit
ulan
2015/06/17 08:47:45
Done.
|
| + "d KB, new limit: %" V8_PTR_PREFIX "d KB (%.1f)\n", |
| + old_gen_size / KB, old_generation_allocation_limit_ / KB, |
| + factor); |
| + } |
| + } |
| +} |
| + |
| + |
| void Heap::EnableInlineAllocation() { |
| if (!inline_allocation_disabled_) return; |
| inline_allocation_disabled_ = false; |