Commit 22b1da99 authored by ulan's avatar ulan Committed by Commit bot

Avoid excessive GCs in small heaps.

Small heaps and small heap growing factor can lead to excessive GCs in corner cases.

Consider function F(old_gen_size, factor) that returns the number of bytes that
have to be allocated in the old generation to start incremental marking.

F(4MB, 1.1) = 4MB (because of kMinimumOldGenerationAllocationLimit)
F(6MB, 1.1) = 2MB (because of kMinimumOldGenerationAllocationLimit)
F(8MB, 1.1) = 800KB

Funtion F should be monotonic in old_gen_size, but it currently has a minimum
at kMinimumOldGenerationAllocationLimit.

This CL makes F monotonic.

BUG=

Review URL: https://codereview.chromium.org/1144223002

Cr-Commit-Position: refs/heads/master@{#28549}
parent d04de62b
......@@ -5303,7 +5303,7 @@ intptr_t Heap::CalculateOldGenerationAllocationLimit(double factor,
CHECK(factor > 1.0);
CHECK(old_gen_size > 0);
intptr_t limit = static_cast<intptr_t>(old_gen_size * factor);
limit = Max(limit, kMinimumOldGenerationAllocationLimit);
limit = Max(limit, old_gen_size + kMinimumOldGenerationAllocationLimit);
limit += new_space_.Capacity();
intptr_t halfway_to_the_max = (old_gen_size + max_old_generation_size_) / 2;
return Min(limit, halfway_to_the_max);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment