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.
|
||||
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 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_;
|
||||
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() {
|
||||
if (!inline_allocation_disabled_) return;
|
||||
inline_allocation_disabled_ = false;
|
||||
|
@ -1177,6 +1177,12 @@ class Heap {
|
||||
void SetOldGenerationAllocationLimit(intptr_t old_gen_size, double gc_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.
|
||||
bool inline_allocation_disabled() { return inline_allocation_disabled_; }
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user