What is the default Full GC interval in Java 8

无人久伴 提交于 2019-12-09 13:34:40

问题


We noticed a strange behavior on our production server (JavaEE, Wildfly 10). The Java VM do once per hour Full GC although there is still enough memory available.

The VM start parameters are:

-server
-Xms4g
-Xmx8g

The following parameters are not activated:

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

So what is the default Full GC interval in Java 8 and how can I configure it to be dynamic?


回答1:


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.




回答2:


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.



来源:https://stackoverflow.com/questions/48640443/what-is-the-default-full-gc-interval-in-java-8

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