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)因为我没有它们方便:).但总的来说,我发现的是
这是prev 的一个很好的参考.stackoverflow讨论.
Tof*_*eer 10
绝大多数开发人员永远不会(或想要)调整GC.我和那些不得不调整它的人一起工作,这是建议:
在您尝试调整垃圾收集器之前,请100%确定您已使用分析器进行验证.到底是怎么回事.一旦开始调整,请确保使用分析器验证它是否具有正面效果.
您还应该重新访问运行的每个VM版本的更改(不同的VM将具有不同的调整策略).
我曾经帮助过一个有GC问题的人,结果证明他们没有关闭JDBC结果集(或者像这样的问题).这导致永远不会释放内存(由于某种原因,他的代码保留在它们上面).修复该问题使程序从20分钟变为30秒或几分钟.内存使用率也下降了.
我不得不说我自己没有必要使用调音.但是我与编写延迟至关重要的代码的人密切合作:他们大量使用这种调优 - 指定使用哪种GC算法,最大暂停时间,幸存者比率等.
我想答案是:如果延迟对应用程序至关重要,您可能需要考虑调整GC