RFR: JDK-8263495: Gather liveness info in the mark phase of G1 full gc [v6]

Hamlin Li mli at openjdk.java.net
Thu Mar 18 08:57:48 UTC 2021


On Thu, 18 Mar 2021 08:14:38 GMT, Stefan Johansson <sjohanss at openjdk.org> wrote:

>>> Testing showed that the regression I reported in the other PR is still present for this fix. Same small reproducer can be used:
>>> 
>>> ```
>>> public class SystemGCLarge {
>>>   public static Object[] holder;
>>>   public static void main(String args[]) {
>>>     holder = new Object[128 * 1024 *1024];
>>>     System.gc();
>>>     System.out.println("Done");
>>>   }
>>> }
>>> ```
>>> 
>>> I've made a change that eliminates the regression by making sure the cache update is not inlined and by doing so allows for other inlining to be done:
>>> [kstefanj at abf54fb](https://github.com/kstefanj/jdk/commit/abf54fbbec5aa0b2fa36c2759e0974cb21d6cf78)
>> 
>> On my local env, it seems make no difference wIth or w/o your patch, for both marking phase and whole full gc pause. But I will apply your patch, Thanks a lot for the benchmarking.
>
>> 
>> On my local env, it seems make no difference wIth or w/o your patch, for both marking phase and whole full gc pause. But I will apply your patch, Thanks a lot for the benchmarking.
> 
> What inlining gets done will depend a lot on the build env, so it might be that your build don't experience the same issue. Because you mean that you can't reproduce the regression at all right? Or is the regression present even after my patch?

It's all the same, following data is in the order of master/with/w/o, (I don't "make clean" before make images)

$ java -Xlog:gc+phases=trace SystemGCLarge | grep "Phase 1: Mark live objects"
[0.518s][info ][gc,phases] GC(0) Phase 1: Mark live objects 68.763ms
$ java -Xlog:gc+phases=trace SystemGCLarge | grep "Phase 1: Mark live objects"
[0.499s][info ][gc,phases] GC(0) Phase 1: Mark live objects 69.115ms
$ java -Xlog:gc+phases=trace SystemGCLarge | grep "Phase 1: Mark live objects"
[0.509s][info ][gc,phases] GC(0) Phase 1: Mark live objects 75.952ms
$ java -Xlog:gc+phases=trace SystemGCLarge | grep "Phase 1: Mark live objects"
[0.519s][info ][gc,phases] GC(0) Phase 1: Mark live objects 68.478ms
$ java -Xlog:gc+phases=trace SystemGCLarge | grep "Phase 1: Mark live objects"
[0.529s][info ][gc,phases] GC(0) Phase 1: Mark live objects 69.646ms


$ java -Xlog:gc+phases=trace SystemGCLarge | grep "Phase 1: Mark live objects"
[0.499s][info ][gc,phases] GC(0) Phase 1: Mark live objects 68.603ms
$ java -Xlog:gc+phases=trace SystemGCLarge | grep "Phase 1: Mark live objects"
[0.519s][info ][gc,phases] GC(0) Phase 1: Mark live objects 72.012ms
$ java -Xlog:gc+phases=trace SystemGCLarge | grep "Phase 1: Mark live objects"
[0.515s][info ][gc,phases] GC(0) Phase 1: Mark live objects 69.525ms
$ java -Xlog:gc+phases=trace SystemGCLarge | grep "Phase 1: Mark live objects"
[0.512s][info ][gc,phases] GC(0) Phase 1: Mark live objects 69.656ms
$ java -Xlog:gc+phases=trace SystemGCLarge | grep "Phase 1: Mark live objects"
[0.512s][info ][gc,phases] GC(0) Phase 1: Mark live objects 69.365ms
$ java -Xlog:gc+phases=trace SystemGCLarge | grep "Phase 1: Mark live objects"
[0.517s][info ][gc,phases] GC(0) Phase 1: Mark live objects 69.441ms


$ java -Xlog:gc+phases=trace SystemGCLarge | grep "Phase 1: Mark live objects"
[0.501s][info ][gc,phases] GC(0) Phase 1: Mark live objects 67.338ms
$ java -Xlog:gc+phases=trace SystemGCLarge | grep "Phase 1: Mark live objects"
[0.511s][info ][gc,phases] GC(0) Phase 1: Mark live objects 75.821ms
$ java -Xlog:gc+phases=trace SystemGCLarge | grep "Phase 1: Mark live objects"
[0.508s][info ][gc,phases] GC(0) Phase 1: Mark live objects 68.903ms
$ java -Xlog:gc+phases=trace SystemGCLarge | grep "Phase 1: Mark live objects"
[0.499s][info ][gc,phases] GC(0) Phase 1: Mark live objects 68.870ms
$ java -Xlog:gc+phases=trace SystemGCLarge | grep "Phase 1: Mark live objects"
[0.495s][info ][gc,phases] GC(0) Phase 1: Mark live objects 67.374ms
$ java -Xlog:gc+phases=trace SystemGCLarge | grep "Phase 1: Mark live objects"
[0.501s][info ][gc,phases] GC(0) Phase 1: Mark live objects 69.018ms

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

PR: https://git.openjdk.java.net/jdk/pull/2966



More information about the hotspot-gc-dev mailing list