Reland "Avoid excessive GCs in small heaps."
Original issue's description: > 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= > > Committed: https://crrev.com/22b1da99732b4db0754bf267ec470a2831216fb2 > Cr-Commit-Position: refs/heads/master@{#28549} TBR=hpayer@chromium.org Review URL: https://codereview.chromium.org/1148953005 Cr-Commit-Position: refs/heads/master@{#28562}
This commit is contained in:
parent
643c85a792
commit
b59fda16fc
@ -5312,7 +5312,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