RFR: 8249676: [REDO] G1 incorrectly limiting young gen size when using the reserve can result in repeated full gcs

Kim Barrett kim.barrett at oracle.com
Sun Sep 13 01:41:43 UTC 2020


> On Sep 10, 2020, at 6:21 AM, Thomas Schatzl <tschatzl at openjdk.java.net> wrote:
> 
> Hi,
> 
>  please review this re-application of JDK-8249676. The change passes two tier8 (plus tier1-7 which never were a problem)
>  runs w/o problems; the crashes I reported in the original review are gone after recent (other) changes.
> 
> Note that this PR contains two commits: the vanilla original patch and an update to fix merge errors with the recent
> IHOP changes.
> 
> Thanks,
>  Thomas
> 
> -------------
> 
> Commit messages:
> - Merge issues resolved
> - Original patch
> 
> Changes: https://git.openjdk.java.net/jdk/pull/108/files
> Webrev: https://webrevs.openjdk.java.net/?repo=jdk&pr=108&range=00
>  Issue: https://bugs.openjdk.java.net/browse/JDK-8249676
>  Stats: 380 lines in 3 files changed: 178 ins; 63 del; 139 mod
>  Patch: https://git.openjdk.java.net/jdk/pull/108.diff
>  Fetch: git fetch https://git.openjdk.java.net/jdk pull/108/head:pull/108
> 
> PR: https://git.openjdk.java.net/jdk/pull/108

Mostly looks good.  A few minor nits, and a couple of questions.

------------------------------------------------------------------------------
src/hotspot/share/gc/g1/g1Policy.cpp 
 229 // The main reason is revising young length, with our without the GCLocker being

s/our/or/

------------------------------------------------------------------------------
src/hotspot/share/gc/g1/g1Policy.cpp 
 253   // allocated more than that for reasons. In this case, use that.

s/for reasons/for various reasons/ ?

------------------------------------------------------------------------------
src/hotspot/share/gc/g1/g1Policy.cpp 
 271     if (!next_gc_should_be_mixed(NULL, NULL)) {
 272       desired_eden_length_by_pause =
 273         calculate_desired_eden_length_by_pause(survivor_base_time_ms,
...
 276     } else {
 277       desired_eden_length_before_mixed =
 278         calculate_desired_eden_length_before_mixed(survivor_base_time_ms,
...
 282     // Above either sets desired_eden_length_by_pause or desired_eden_length_before_mixed,
 283     // the other is zero. Use the one that has been set below.
 284     uint desired_eden_length = MAX2(desired_eden_length_by_pause,
 285                                     desired_eden_length_before_mixed);

This would be simpler if there were
  calculate_desired_eden_length_by_pause
which conditionally called (based on next_gc_should_be_mixed) either
  calculate_desired_eden_length_before_young_only (new name)
  calculate_desired_eden_length_before_mixed

However, this would lose the logging distinction between the two. Is that
logging distinction important enough to justify uglifying the code?

------------------------------------------------------------------------------
src/hotspot/share/gc/g1/g1Policy.cpp  
1116   uint max_length = target_young_length + expansion_region_num;
1117   assert(target_young_length <= max_length, "post-condition");

The assertion seems rather pointless, since we're dealing with unsigned
values.  But maybe the intent is to check for overflow, in which case the
assertion message should say so.

------------------------------------------------------------------------------ 
src/hotspot/share/gc/g1/g1Policy.cpp 
1114     assert(expansion_region_num == 0, "sanity");

[pre-existing] This assertion seems pointless.

------------------------------------------------------------------------------
src/hotspot/share/gc/g1/g1Policy.cpp  
1364   if (reclaimable_percent <= threshold) {

The two logging messages that follow are rather excessively long.

And if they were formatted differently it might make it more obvious they
are identical except for the parenthetical part of the message.  (Or at
least I *think* they are; not so easy to compare by eye across horizongal
scrolling or wrapping.)

(I looked at combining them; not sure it's worthwhile.)

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




More information about the hotspot-gc-dev mailing list