Full GC without pause?

Thomas Schatzl thomas.schatzl at oracle.com
Mon Jun 28 07:27:50 UTC 2021


Hi,

On 27.06.21 10:30, Stefan Reich wrote:
> Hi,
> 
> in my <https://bea.gazelle.rocks/>application 
> <https://bea.gazelle.rocks> I have about 800 MB of live objects. I know 
> this because that's the used heap I get after running System.gc().
> 
> However, in normal operation (without calling System.gc()), heap use 
> hovers around 3 GB out of 6 GB. I'm using G1.
> 
> So my question is - since the garbage collector is supposed to "race" 
> the application threads anyway - can't it be made to "race to the end"? 
> Meaning, until no or almost no dead objects remain?
> 
> I am totally fine with this potentially lowering the overall application 
> or GC throughput; it's supposed to happen in irelatively (though not 
> completely!) idle phases.

Please give ZGC a try, it might give you exactly what you want here. 
There are only a few very small STW pauses (<1 ms) per collection cycle 
with it in jdk16/17.

> 
> I really can't afford the seconds-long stop-the world pause of 
> System.gc(). I just wish to put the regular backgruond GC on 
> steroids for a few seconds until its job is done >
> Reasons?

Not sure exactly which reasons for which of the questions you expect 
here, but one reason for why g1 system.gc() call (without 
-XX:+ExplicitGCInvokesConcurrent) is that it's defined as a fully, 
maximally compacting stw gc pause.

> 
> A. It just feels cleaner to have no more dead objects. (Gotta love the 
> clean feeling!)

Options with G1 are to

- enable -XX:+ExplicitGCInvokesConcurrent to get a concurrent marking 
with subsequent incremental collections since you "are not completely 
idle". This should give you lower pause times at least.

- maybe the functionality in 
https://bugs.openjdk.java.net/browse/JDK-8204089 provides what you want 
for g1.

> B. We find out how much heap we are actually using - no chance of that 
> in normal operation.

MXBeans should give you a fairly good idea about that without an stw 
full gc, particularly after a concurrent marking.

Thanks,
   Thomas


More information about the hotspot-gc-use mailing list