RFR: Do not apply evacuation budgets in non-generational mode

Y. Srinivas Ramakrishna ysr at openjdk.org
Fri Nov 18 00:16:37 UTC 2022


On Thu, 17 Nov 2022 23:15:28 GMT, William Kemper <wkemper at openjdk.org> wrote:

> CSet selection for non-generational mode was using a value configured on the young generation. In non-generational modes we do not maintain all the attributes of the young generation (instead we maintain the _global_ generation). This caused many cycles in which the maximum CSet was zero (or close to it). This, in turn, caused the collector to run much more frequently (approximately 3x on specjbb) which caused severe performance regression in critical jops.
> 
> I'm not sure why the diff algorithm is struggling so much with these changes. I pulled up the `mode()->is_generational()` out of `compute_evacuation_budgets` and `adjust_evacuation_budgets` into the caller and replaced the check with an assert (re-indenting the code in the method).

Interesting, I wonder if this would make any diff (pun not intended):


--diff-algorithm={patience|minimal|histogram|myers}
Choose a diff algorithm. The variants are as follows:

default, myers
The basic greedy diff algorithm. Currently, this is the default.

minimal
Spend extra time to make sure the smallest possible diff is produced.

patience
Use "patience diff" algorithm when generating patches.

histogram
This algorithm extends the patience algorithm to "support low-occurrence common elements".

For instance, if you configured the diff.algorithm variable to a non-default value and want to use the default one, then you have to use --diff-algorithm=default option.

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

PR: https://git.openjdk.org/shenandoah/pull/171


More information about the shenandoah-dev mailing list