有没有人发现垃圾收集调整有用?

For*_*ner 21 java performance garbage-collection

我已经阅读了很多关于在Java中调优GC的文章,并且经常想知道有多少人真正使用了一些更高级的功能.

我总是尽可能地避免调整,并专注于编写尽可能简单的代码(Brian Goetz的建议) - 到目前为止,这似乎对我有用.

这些调整策略是否适应VM版本的变化,还是需要不断重新评估?

我使用的一个调整是-server标志.

Ste*_* B. 20

我目前的工作的一部分是关注和提供大型Java应用程序,该应用程序旨在运行大量内存(目前大约8 Gb),主要是由于持续计算大量缓存数据.我使用标准GC设置进行了初始部署,主要是因为没有一种简单的方法来模拟全速运行的生产环境.

在接下来的几个月中,我已经定制了GC设置.一般来说,最大的可用旋钮似乎是调整增量gc的频率和幅度 - 最大的改进是在较大和较频繁的gc中折衷大周期gc.但我们肯定能够看到性能改进.

我不打算发布我的特定设置,因为a)它们特定于我们的设置,而b)因为我没有它们方便:).但总的来说,我发现的是

  • 在调整默认gc设置方面已经做了很多工作. 几乎总是默认值比我做的任何调整更好.
  • 至少在我看来,gc调优实际上值得的情况非常严重,以至于尝试模拟它们是不合理的,所以我必须通过实验和增量来做.

是prev 一个很好的参考.stackoverflow讨论.


Tof*_*eer 10

绝大多数开发人员永远不会(或想要)调整GC.我和那些不得不调整它的人一起工作,这是建议:

在您尝试调整垃圾收集器之前,请100%确定您已使用分析器进行验证.到底是怎么回事.一旦开始调整,请确保使用分析器验证它是否具有正面效果.

您还应该重新访问运行的每个VM版本的更改(不同的VM将具有不同的调整策略).

我曾经帮助过一个有GC问题的人,结果证明他们没有关闭JDBC结果集(或者像这样的问题).这导致永远不会释放内存(由于某种原因,他的代码保留在它们上面).修复该问题使程序从20分钟变为30秒或几分钟.内存使用率也下降了.


oxb*_*kes 8

我不得不说我自己没有必要使用调音.但是我与编写延迟至关重要的代码的人密切合作:他们大量使用这种调优 - 指定使用哪种GC算法,最大暂停时间,幸存者比率等.

我想答案是:如果延迟对应用程序至关重要,您可能需要考虑调整GC