6

我看到使用 -Xmx2g,峰值内存达到 1G 并进行主要收集(marksweep 收集器)。配合-Xmx3g,达到1.5G,做大合集。使用-Xmg4g,它达到2G并进行主要收集。但是,从这里开始,我尝试将最大内存增加到 6G、8G、12G,并且每次峰值内存达到 2G 时都会进行主要收集。

如何让它使用超过2G?我没有遇到任何设置。-Xms 在这里重要吗?对于那些 -Xmx,我将 -Xms 设为 -Xmx 的一半。

我正在使用 Jetty,Java 1.6.024。

更新:是的,我使用的是 64 位 JVM。我使用的 JVM 选项是: -Xmx6g -Xms3g -XX:MaxPermSize=256m 我确定峰值内存的方法是查看 JConsole 中的内存图。它达到2G并下降(主要收藏)。老一代达到 1.5G 最大值,然后发生下降。

谢谢,婴儿车。

4

1 回答 1

1

您有三个内存区域,伊甸园、幸存者和终身空间。

我怀疑正在发生的事情是,随着您增加最大尺寸,终身或伊甸园空间没有增长。

这两个区域很重要的原因是,当永久空间填满时,会触发 Full GC(我怀疑这个大小正在增长) GC 也会被触发。

如果这是您的问题的原因,那么您正在创建大量中等寿命的对象,这可能是性能问题,除非您可以减少创建的数量。另一种方法是指定一个更大的新大小,这会增加伊甸园的大小。

尝试-mx12g -XX:NewSize=10g - verbosegc

最后一个选项将在清理时为您提供各个空间的大小。

于 2012-04-10T08:25:45.963 回答