Dampen old generation allocation limit after scavenge if allocation rate is low.
BUG=chromium:491907,chromium:499815 LOG=NO Review URL: https://codereview.chromium.org/1180203003 Cr-Commit-Position: refs/heads/master@{#29072}
This commit is contained in:
parent
d4f7bff1ea
commit
084d1f3db3
@ -1286,16 +1286,18 @@ bool Heap::PerformGarbageCollection(
|
|||||||
// Update relocatables.
|
// Update relocatables.
|
||||||
Relocatable::PostGarbageCollectionProcessing(isolate_);
|
Relocatable::PostGarbageCollectionProcessing(isolate_);
|
||||||
|
|
||||||
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 gc_speed = tracer()->CombinedMarkCompactSpeedInBytesPerMillisecond();
|
||||||
double mutator_speed = static_cast<double>(
|
double mutator_speed = static_cast<double>(
|
||||||
tracer()
|
tracer()
|
||||||
->CurrentOldGenerationAllocationThroughputInBytesPerMillisecond());
|
->CurrentOldGenerationAllocationThroughputInBytesPerMillisecond());
|
||||||
intptr_t old_gen_size = PromotedSpaceSizeOfObjects();
|
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_;
|
||||||
SetOldGenerationAllocationLimit(old_gen_size, gc_speed, mutator_speed);
|
SetOldGenerationAllocationLimit(old_gen_size, gc_speed, mutator_speed);
|
||||||
|
} else if (HasLowYoungGenerationAllocationRate()) {
|
||||||
|
DampenOldGenerationAllocationLimit(old_gen_size, gc_speed, mutator_speed);
|
||||||
}
|
}
|
||||||
|
|
||||||
{
|
{
|
||||||
@ -5578,6 +5580,24 @@ 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_) {
|
||||||
|
if (FLAG_trace_gc_verbose) {
|
||||||
|
PrintIsolate(isolate_, "Dampen: old size: %" V8_PTR_PREFIX
|
||||||
|
"d KB, old limit: %" V8_PTR_PREFIX "d KB, \n",
|
||||||
|
"new limit: %" V8_PTR_PREFIX "d KB (%.1f)\n",
|
||||||
|
old_gen_size / KB, old_generation_allocation_limit_ / KB,
|
||||||
|
limit / KB, factor);
|
||||||
|
}
|
||||||
|
old_generation_allocation_limit_ = limit;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
void Heap::EnableInlineAllocation() {
|
void Heap::EnableInlineAllocation() {
|
||||||
if (!inline_allocation_disabled_) return;
|
if (!inline_allocation_disabled_) return;
|
||||||
inline_allocation_disabled_ = false;
|
inline_allocation_disabled_ = false;
|
||||||
|
@ -1177,6 +1177,12 @@ class Heap {
|
|||||||
void SetOldGenerationAllocationLimit(intptr_t old_gen_size, double gc_speed,
|
void SetOldGenerationAllocationLimit(intptr_t old_gen_size, double gc_speed,
|
||||||
double mutator_speed);
|
double mutator_speed);
|
||||||
|
|
||||||
|
// Decrease the allocation limit if the new limit based on the given
|
||||||
|
// parameters is lower than the current limit.
|
||||||
|
void DampenOldGenerationAllocationLimit(intptr_t old_gen_size,
|
||||||
|
double gc_speed,
|
||||||
|
double mutator_speed);
|
||||||
|
|
||||||
// Indicates whether inline bump-pointer allocation has been disabled.
|
// Indicates whether inline bump-pointer allocation has been disabled.
|
||||||
bool inline_allocation_disabled() { return inline_allocation_disabled_; }
|
bool inline_allocation_disabled() { return inline_allocation_disabled_; }
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user