java - 从 Java5 迁移到 6 后 GC 行为的变化

标签 java garbage-collection

我们最近将系统从 Sun Java 5 迁移到 Java6 服务器虚拟机(具体来说,Linux 32 位上的 1.6.0_16)。我们注意到垃圾收集行为发生了变化,从而触发了我们的堆警告监控系统。

堆使用情况图表表明,与我们在 Java5 中看到的相比,内存使用情况更加“尖锐”,VM 在运行大型 GC 之前让堆使用情况变得非常高。这似乎不是应用程序系统本身的问题(它实际上从未耗尽内存),但每当使用峰值接近阈值时,它就会偶尔给监控系统发出虚假的“头发着火”信号。

我们可以增加堆最大值,并希望峰值不会简单地变得更大,但我更愿意找出是否有一种方法可以调整 JVM 参数,以便即使性能有所下降,我们也能获得更平滑的配置文件。

我猜我们可以设置一些 -XX 选项来实现这一点,但我在文档中没有看到任何这样的东西。有人知道这样的选择吗?

最佳答案

听起来你真的很想要一些更像 concurrent collection 的东西。 (与标准的大爆炸系列相反):

The concurrent collector is designed for applications that prefer shorter garbage collection pauses and that can afford to share processor resources with the garbage collector while the application is running.

也许更重要的是,除了特定的垃圾收集选项之外,您还应该确保使用具有正确选项的正确虚拟机。例如,我被client vs. server VM绊倒了。在我自己的生活中多次出现这个问题。

关于java - 从 Java5 迁移到 6 后 GC 行为的变化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1841479/

相关文章:

java - 我可以让 Jenkins 每小时检查一次 SVN 是否有变化吗?

c# - 第三方库中麻烦的 GC.collect() 调用

java - gc方法如何工作?

java - 在Android主游戏循环中旋转位图而不重载GC

c++ - boost python 对象的生命周期

java - 访问多个表

java - Android 到处传递 Context

java - 如何在 Java 中比较字符串?

java - 在 switch 语句的 case 部分使用方法

C# 显式删除事件处理程序