Before starting young-gc (`PSScavenge::invoke`), we check if the upcoming yonug-gc should be upgraded to full-gc, based on history data (`PSScavenge::should_attempt_scavenge`), with the goal of avoiding promotion-failure during the upcoming young-gc.
After a successful young-gc, we check again (`PSAdaptiveSizePolicy::should_full_GC`) if a full-gc should follow to avoid future promotion-failure. (Ofc, if young-gc fails, we upgrade to full-gc.)
The after-success-young-gc check can be quite conservative; remove it to avoid unnecessary full-gc.
(The attachment shows a full-gc starts when it's not really needed. Running: `java -Xms3g -Xmx3g -XX:+UseParallelGC -XX:NewSize=1g pgc_full_gc.java`)