我们注意到我们的生产服务器(JavaEE、Wildfly 10)上有一个奇怪的行为。尽管仍有足够的可用内存,但 Java VM 每小时执行一次 Full GC。
VM 启动参数为:
-server
-Xms4g
-Xmx8g
以下参数为不是 活性:
-Dsun.rmi.dgc.client.gcInterval=3600000
-Dsun.rmi.dgc.server.gcInterval=3600000
那么 Java 8 中默认的 Full GC 间隔是多少,如何将其配置为动态的?
最佳答案
你说
-Dsun.rmi.dgc.client.gcInterval=3600000
-Dsun.rmi.dgc.server.gcInterval=3600000
没有“激活”。但是,这些是这些属性的默认值;即,如果您不为属性指定值,则您获得的值。
引用:Oracle 的 sun.rmi Properties文档。
So what is the default Full GC interval in Java 8
有关 DCG 触发的完整 GC,请参见上文。
除此之外,当请求(通过
System.gc()
调用)或当 JVM 认为有必要时,会发生完整的 GC。如果您不使用 RMI,则没有固定的时间间隔。... and how can I configure it to be dynamic?
如果你的意思是,你怎么能阻止 RMI 每小时触发一次完整的 GC:
-XX:+DisableExplicitGC
启动 JVM。旗帜。注意:这将禁用对 System.gc()
的所有调用不仅仅是 RMI 的 DGC 发出的调用。另见:Impact of setting -XX:+DisableExplicitGC when NIO direct buffers are used对于这可能导致的一些问题。 -XX:+ExplicitGCInvokesConcurrent
旗帜。这减少了调用 System.gc()
的影响。 ,但它只适用于支持并发收集的 GC;例如CMS, G1, ZGC或 Shenandoah .您可以潜在地调整其他内容以减少并发收集器“停止世界”的暂停,但这超出了本问题的范围。
关于java - Java 8 中默认的 Full GC 间隔是多少,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48640443/