G1 pauses and number of application threads

Stefan Johansson stefan.johansson at oracle.com
Thu Oct 12 16:04:55 UTC 2017


Hi Nicola,

See my comments below.

On 2017-10-11 18:49, Nicola Ferraro wrote:
> Hi,
> I've started to look at G1 garbage collector internals and I would 
> like to know if the performance of G1 are affected by the number of 
> threads in the application. Doing a STW means stopping all application 
> threads, and this suggests me that the more threads you have in your 
> application, the longer STW pauses will be.
>
> I've done some basic tests (from 1 thread to 10, 100, 1000) and I'm 
> not able to see a clear pattern. But this may be due to my ignorance 
> on the topic. I'm collecting data using 
> "-XX:+PrintGCApplicationStoppedTime -XX:+PrintSafepointStatistics 
> -XX:PrintSafepointStatisticsCount=1" on JDK 8.

So this is true in the sense that all your application threads have to 
be stopped before the STW work can be started. The time it takes to get 
the threads stopped is not only connected to the number of threads. 
Having more threads might very well take a bit longer to stop, but what 
the threads are doing is also a factor. So you should not really expect 
to find a clear pattern here that you can apply to all applications.

>
> Is it true that the number of threads slow down G1 GC?

Not really, as you know the application threads are stopped during the 
STW pauses, so the number of application threads don't really affect G1 
that much while doing most of the GC work. One way the application 
threads do affect the GC pause (true for all GCs, most of this is) is 
that each thread generates some work since the GC need to ensure that 
objects used by the thread are kept alive. But once that is done the GC 
runs without being affected by the application threads.

Another way the application threads affect the GC is during the 
concurrent phase, where G1 mark through the Old regions in the heap 
without stopping the application threads. We usually see it as the GC 
affecting the application threads and not the other way around. In a 
scenario where a lot of application threads are running the GC threads 
will get less CPU time to do its work, and in that sense run slower.

Hope this helps,

Cheers,
Stefan

>
> Regards,
> Nicola Ferraro
>
>
> _______________________________________________
> hotspot-gc-use mailing list
> hotspot-gc-use at openjdk.java.net
> http://mail.openjdk.java.net/mailman/listinfo/hotspot-gc-use

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.openjdk.java.net/pipermail/hotspot-gc-use/attachments/20171012/c631b410/attachment.html>


More information about the hotspot-gc-use mailing list