-
Notifications
You must be signed in to change notification settings - Fork 5.5k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
8308009: Generational ZGC: OOM before clearing all SoftReferences #14122
Conversation
👋 Welcome back eosterlund! A progress list of the required criteria for merging this PR into |
Webrevs
|
@fisk This change now passes all automated pre-integration checks. ℹ️ This project also has non-automated pre-integration requirements. Please see the file CONTRIBUTING.md for details. After integration, the commit message for the final commit will be:
You can use pull request commands such as /summary, /contributor and /issue to adjust it as needed. At the time when this comment was updated there had been 69 new commits pushed to the
As there are no conflicts, your changes will automatically be rebased on top of these commits when integrating. If you prefer to avoid this automatic rebasing, please check the documentation for the /integrate command for further details. ➡️ To integrate this PR with the above commit message to the |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I think it looks good.
Only one thing I can think of. There is an implicit assumption here that should_clear_soft_references implies should_preclean_young which is required to be spec compliant. Maybe should_preclean_young
should start with
if (should_clear_soft_references(cause)) {
return true;
}
to make this clearer. Or even short circuit the if (should_preclean_young(...))
directly in ZDriverMajor::collect_young
Right. This is already guaranteed because
Do we want a comment explaining the above, or change the code structure to be more explicit? I personally don't mind. |
I added an assert checking that we don't mess up pre-cleaning and a comment explaining why it holds. |
/integrate |
Thanks for the review @xmas92! |
Going to push as commit d3b9b36.
Your commit was automatically rebased without conflicts. |
When a major GC in generational ZGC with a different cause that doesn’t pre-clean and doesn’t clear soft references, we ask if there are allocations stalled on old. And part of that condition is to check if we are not stalled on young. So if an allocation request comes in just before such a “weak” major GC, we will say we won’t clear soft references. But after that major collection we will satisfy all the constraints to throw OOM as both an YC and OC has passed since the allocation request was installed.
The solution is to let the driver remember if it cleared soft references or not, and only throw OOM if it cleared soft references.
Progress
Issue
Reviewers
Reviewing
Using
git
Checkout this PR locally:
$ git fetch https://git.openjdk.org/jdk.git pull/14122/head:pull/14122
$ git checkout pull/14122
Update a local copy of the PR:
$ git checkout pull/14122
$ git pull https://git.openjdk.org/jdk.git pull/14122/head
Using Skara CLI tools
Checkout this PR locally:
$ git pr checkout 14122
View PR using the GUI difftool:
$ git pr show -t 14122
Using diff file
Download this PR as a diff file:
https://git.openjdk.org/jdk/pull/14122.diff
Webrev
Link to Webrev Comment