当前位置: 首页 > 知识库问答 >
问题:

优化并行GC以实现高效的年轻GC

臧正平
2023-03-14

此图表显示了我们的Java应用程序在4天内的堆利用率(OU欧盟S1U S2U)。每次下降都是一个Young GC事件。正如您可以注意到的,堆使用率有一个增加的模式。完整的GC在运行6天后发生(图表中未显示)。它将堆使用率降低到正常水平,但暂停时间为2分钟,它会导致应用程序下降许多事务。

我们的JRE是8,我们使用并行GC。堆参数如下所示:

 java -server -Xms64g -Xmx64g -XX:MetaspaceSize=96M -Djava.net.preferIPv4Stack=true -Djboss.modules.system.pkgs=org.jboss.byteman -Djava.awt.headless=true -XX:MaxMetaspaceSize=1g -XX:+UseParallelGC -XX:ParallelGCThreads=4 -XX:+HeapDumpOnOutOfMemoryError -Djava.net.preferIPv4Stack=true -Dorg.jboss.resolver.warning=true -Dsun.rmi.dgc.client.gcInterval=3600000 -Dsun.rmi.dgc.server.gcInterval=3600000 -Dsun.zip.disableMemoryMapping=true

我试图了解什么调整是可能的,使年轻GC更有效,以便它删除所有垃圾,避免晋升到终身一代。

共有2个答案

梁新觉
2023-03-14

正如Lawrey先生指出的那样,您可以使年轻一代更大,这将增加(希望)次要GC事件之间的时间。通过这样做,更多的对象应该成为垃圾,并将被收集在次要GC中,而不会被提升到旧一代。另一种方法是提高任期阈值,这与将对象保留在年轻一代更长时间的效果相同。

另一个要问自己的问题是,你真的需要使用并行GC吗?如果使用G1,收集旧空间的部分工作将与应用程序线程并发处理。您可能能够完全消除长暂停(假设堆没有过度碎片化),因为您不需要完全压缩集合。

为了彻底消除停顿,我可以向Azul(我的工作对象:-)衷心推荐Zing中的C4收集器。

堵龙野
2023-03-14

问题似乎是对象被提升到终身空间,然后死亡。减少这种情况的一种方法是使年轻空间更大,但是这只会延迟完整的收集。

另一种方法可能是减少堆,使其更频繁地收集,从而减少暂停时间。如果使用32GB堆,它可以使用压缩的OOP,从而提高内存使用效率。

 类似资料:
  • 说明:在第一个示例中,您可以用以下气球组来装饰桌子:“RGG”、“GBB”、“BRR”、“RRG”,其中“R”、“G”和“B”分别代表红色、绿色和蓝色的球。

  • 这里有我的GC.log的摘录: 2013-02-28T12:02:13.209+0100:1486457.849:[GC 1486457.850:[ParNew 3483368K->96838K(3774912K),0.2273030秒]8085678K->4710336K(49912256K),0.2278070秒][times:user=1.54 sys=0.01,real=0.23秒] 20

  • 本文向大家介绍Android 优化之卡顿优化的实现,包括了Android 优化之卡顿优化的实现的使用技巧和注意事项,需要的朋友参考一下 Android 系统每隔 16ms 会发出 VSYNC 信号重绘界面(Activity)。之所以是 16ms,是因为 Android 设定的刷新率是 60FPS(Frame Per Second),也就是每秒 60 帧的刷新率,约合 16ms 刷新一次。 这就意味

  • 框架:Spring+mybatis+dubbo+RocketMQ。 下面是JVM参数: -server-xmx5g-xms5g-xn1g-xx:metaspacesize=512m-xx:maxmetaspacesize=512m-xss256k-xx:survivorratio=8-xx:+printgcdetails-xloggc:/opt/apps/logs/gc.log-xx:+print

  • 问题内容: 本文在这里建议使用“为了使与并发GC并行年轻一代的GC”。 我的困惑是,为了同时启用并行和并发GC,我应该 使用或 同时使用 和 ? 聚苯乙烯 我正在使用JVM 6。 问题答案: 由于链接的文档是针对1.4.2 VM的,因此我假设您正在使用(JVM 5和6的行为有所不同)。 从http://java.sun.com/docs/hotspot/gc1.4.2/ 如果在命令行上使用了-XX

  • 本文向大家介绍Android 优化之app启动优化的实现,包括了Android 优化之app启动优化的实现的使用技巧和注意事项,需要的朋友参考一下 App 启动方式 冷启动 App 没有启动过或 App 进程被杀,系统中不存在该 App 进程,此时启动即为冷启动。需要创建 App 进程,加载相关资源,启动 Main Thread,初始化首屏 Activity 等。在这个过程中,屏幕会显示一个空白的