-
Bug
-
Resolution: Fixed
-
P3
-
hs23
-
b03
-
generic
-
generic
-
Not verified
Issue | Fix Version | Assignee | Priority | Status | Resolution | Resolved In Build |
---|---|---|---|---|---|---|
JDK-2216398 | 8 | Tony Printezis | P3 | Resolved | Fixed | b11 |
JDK-2215758 | 7u4 | Tony Printezis | P3 | Closed | Fixed | b01 |
It looks as if G1 does not always initiate partially-young GCs after a concurrent marking cycle. The flag that initiates partially-young GCs is _last_full_young_gc (it means: the next GC will be the last young GC and we'll do partially-young ones after that) and it's set in record_concurrent_mark_cleanup_completed(). This is called at the end of concurrent cleanup:
// Check if cleanup set the free_regions_coming flag. If it
// hasn't, we can just skip the next step.
if (g1h->free_regions_coming()) {
...
_sts.join();
g1_policy->record_concurrent_mark_cleanup_completed();
_sts.leave();
}
Note, however, that unfortunately it's only called if free_regions_coming() is true, which is only true if cleanup found totally empty regions to reclaim.
Many thanks to Thomas Schatzl for bringing this up.
// Check if cleanup set the free_regions_coming flag. If it
// hasn't, we can just skip the next step.
if (g1h->free_regions_coming()) {
...
_sts.join();
g1_policy->record_concurrent_mark_cleanup_completed();
_sts.leave();
}
Note, however, that unfortunately it's only called if free_regions_coming() is true, which is only true if cleanup found totally empty regions to reclaim.
Many thanks to Thomas Schatzl for bringing this up.
- backported by
-
JDK-2216398 G1: partially-young GCs not initiated under certain circumstances
- Resolved
-
JDK-2215758 G1: partially-young GCs not initiated under certain circumstances
- Closed