What is the default Full GC interval in Java 8

吃可爱长大的小学妹 提交于 2019-12-03 15:55:17

You say that

-Dsun.rmi.dgc.client.gcInterval=3600000
-Dsun.rmi.dgc.server.gcInterval=3600000

are not "activated". However, those are the default values for those properties; i.e. the values that you get if you DON'T specify values for the properties.

Reference: Oracle's sun.rmi Properties documentation.

So what is the default Full GC interval in Java 8

See above for the DCG triggered full GCs.

Apart from that, a full GC happens when requested (by a System.gc() call) or when the JVM decides it is necessary. There is no fixed interval if you are not using RMI.

... and how can I configure it to be dynamic?

If you mean, how can you stop RMI from triggering a full GC every hour:

  • One way is to specify (much) larger values for those properties.

  • Another way is to launch the JVM with the -XX:+DisableExplicitGC flag. Note: this will disable all calls to System.gc() not just the calls that RMI's DGC makes. See also: Impact of setting -XX:+DisableExplicitGC when NIO direct buffers are used for some of the problems that this may cause.

  • A third way is to use -XX:+ExplicitGCInvokesConcurrent flag. This reduces the impact of calls to System.gc(), but it will only work with GCs that support concurrent collection; e.g. CMS, G1, ZGC or Shenandoah.

    You can potentially tune other things to reduce the concurrent collectors "stop the world" pauses, but that is beyond the scope of this question.

Another solution would be to set the option

 -XX:+ExplicitGCInvokesConcurrent 

in combination with

 -XX:+UseG1GC

This way System.gc() will not be disabled but less harmful by making the GC work in concurrent mode instead of causing "stop the world" situations. I used this to successfully reduce my GC pauses in WildFly from 10 seconds to 500ms.

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!