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}
This commit is contained in:
parent
d04de62be3
commit
22b1da9973
@ -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);
|
||||
|
Loading…
Reference in New Issue
Block a user