我看到使用-Xmx2g时,峰值内存达到1G并进行主要收集(markweep collector)。使用-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并下降(主要收集)。 Old Gen达到1.5G max然后掉线。
谢谢, 婴儿车。
答案 0 :(得分:1)
你有三个记忆区域,伊甸园,幸存者和终身空间。
我怀疑发生的事情是,当你增加最大尺寸时,终身或伊甸园空间都没有增长。
这两个区域之所以重要的原因是当终身空间填充时会触发Full GC(我怀疑这个大小正在增长)当伊甸园空间填满并且幸存者空间中没有足够的空间来复制剩下的所有物体,还会触发完整的GC。
如果这是导致问题的原因,那么除非可以减少创建的数量,否则您将创建大量中等生命对象,这可能是性能问题。 另一种方法是规定一个更大的新尺寸,这增加了伊甸园的大小。
尝试-mx12g -XX:NewSize=10g - verbosegc
最后一个选项会在清理时为您提供各个空间的大小。