我已经读了大量文章有关调整GC在爪哇和经常想知道有多少人 真的 使用一些更先进的功能。

我一直避免的调整在可能和浓缩编写尽可能简单的代码我可以(布莱恩戈茨的意见)-这似乎运作良好,为我这么远。

这些调整的战略弹性的改变跨VM版本,或者他们需要不断重新评估?

这一调整,我已使用的是服务器的标志。

有帮助吗?

解决方案

一部分,我目前的工作是护理和喂养的大java应用程序设计运行具有大量的存储器(目前约有8Gb),主要是由于正在进行的计算,有很多的缓存的数据。我有没有初步部署的标准的GC设置,主要是因为没有一个简单的方式来模拟生产的环境中运行在充分的倾斜。

在阶段,在接下来的几个月里,我已经定制的GC设置。一般来说,最大的可钮似乎是调节的频率和强度的增量gc-最大的改善,已经在贸易关闭大型的定期gc对于较小和更加频繁。但是我们肯定已经能够看到的性能改进。

我不会发表我的特定设置的,因为a)他们针对我们的安装和b),因为我没有他们方便:).但在一般情况下,我发现了什么是

  • 还有很多工作 调默认的gc设置。几乎 总是默认项工作比任何调整,我将做。
  • 至少对我来说,情况 gc调整实际上是值得的 都是极端的,这是 不合理的尝试,以模拟 他们,所以我不得不这样做 通过实验和损害的结果涉及人员或财产。

这里的 一个很好的参考,从上一个.计算器的讨论。

其他提示

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

  

在您尝试调整垃圾之前   收藏家100%肯定你有   通过分析器验证。什么是   继续一旦你开始调整make   确保您使用分析器验证   它产生了积极的影响。

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

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

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

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

我想说最常见的调整是最大内存大小。大多数其他内存选项都有合理的默认值,并经常过度调整恕我直言。即设置它真的没有太大的区别。在任何情况下,我常常看到人们设置了很多选项,其中一半是默认选项。 ;)

使用分析器是改善GC行为的最有用方法(通过减少创建的对象数量)

我有,但不是最近。我正在处理的应用程序是实时渲染由各个动态JPEG图像构成的视频流。当时(大约是JDK 1.2和1.3), -Xincgc 设置会将客户端垃圾收集器从更大的清理切换到定期清理一点垃圾的模式。因此,帧延迟的分布要低得多,给人的印象是视频更流畅(而不是1-2-3暂停,1-2-3暂停)。

我在相当长的时间内没有看过那段代码,但我强烈怀疑,使用现代垃圾收集算法, -Xincgc 实际上会降低性能。

在今天的世界中,我会说应该始终适用标准优化怀疑论:个人资料个人资料。你确定瓶颈真的是垃圾收集器......?

简而言之,是的,它对调整任何严肃的Java应用程序非常有用。我们经常发现,在生产场景中,稳定的应用程序和完全不可预测的应用程序之间存在差异。这肯定不是我做的第一件事,但是一旦你有一个应用程序工作并且可以对它应用实际负载,它就是那时要研究的第一件事。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top