RFR: 8257774: G1: Trigger collect when free region count drops below threshold to prevent evacuation failures [v3]

Thomas Schatzl tschatzl at openjdk.java.net
Thu Apr 15 10:03:39 UTC 2021


On Thu, 25 Mar 2021 02:04:11 GMT, Aditya Mandaleeka <adityam at openjdk.org> wrote:

>> _This PR picks up from [this previous PR](https://github.com/openjdk/jdk/pull/1650) by @charliegracie._
>> 
>> I won't repeat the full description from the prior PR, but the general idea is to add the notion of a "proactive GC" to G1 which gets triggered in the slow allocation path if the number of free regions drops below the amount that would be required to complete a GC if it happened at that moment. The threshold is based on the survival rates from eden and survivor spaces along with the space required for tenured space evacuations.
>> 
>> There are a couple of outstanding issues/questions known:
>> - _Interaction with GCLocker_: In the case where we determine that a proactive GC is required and GC locker is active, we don't allow the young gen to expand (instead threads will stall). @tschatzl raised this and suggested that it should be discussed as part of the review.
>> - _Disable proactive GC heuristic during initialization_: I ran into an issue in testing where code in the universe initialization codepath was tripping the proactive GC heuristic, leading to a GC being triggered before the VM has finished initialization. I need to find a good way to prevent this from happening. There may already be a mechanism for this, but I couldn't find one so I added a temporary placeholder (`zzinit_complete`) just to unblock testing.
>
> Aditya Mandaleeka has updated the pull request incrementally with one additional commit since the last revision:
> 
>   Fix format specifiers.

During some internal discussion with the people that had looked at the change a bit, we agreed that the additional `attempt_lock_free_first` parameter is very ugly and complicates the code a lot.

[Here](https://github.com/tschatzl/jdk/commit/6c10cb3e6d71fcbb487385e23ea77d3c29f31b4d) is an attempt to remove this parameter by an explicit method that allocates using a new region. It does look nicer to me. No testing has been performed, just to see how it would look like.

The change also removes that `use_retained_region_if_available` parameter form the lock-free `attempt_allocation` call. With your recent changes, all paths should try it (there has been a case where this was not true, but I think that one was errorneous), so I removed that parameter too.

Please also merge with latest once more, the change is a bit out of date.

-------------

PR: https://git.openjdk.java.net/jdk/pull/3143



More information about the hotspot-gc-dev mailing list