我看到在使用-Xmx2g时,峰值内存达到1G,并且执行主要的收集(标记扫描收集器)。使用-Xmx3g,它达到了1.5G,并进行了主要的收集。有了-Xmg4g,它可以达到2G并进行主要的收集。但是,从这里开始,我尝试将最大内存增加到6G、8G、12G,所有峰值内存达到2G的时候都会进行主要的收集。
如何使用beyond 2G?我没有遇到任何这样的设置。-Xms在这里很重要吗?对于那些-Xmx,我做了-Xms half of -Xmx。
我使用的是Jetty,Java 1.6.024。
更新:是的,我使用的是64位JVM。我使用的JVM选项是:-Xmx6g,-Xms3g,-XX:MaxPermSize=256m我确定峰值内存的方法是通过查看JConsole中的内存图。它达到2G并下降(主要收集)。旧的Gen达到1.5G最大值,然后下降。
谢谢,婴儿车。
发布于 2012-04-10 16:25:46
你有三个内存区域,伊甸园,幸存者和永久空间。
我怀疑的是,随着最大大小的增加,永久空间或伊甸园空间都不会增长。
这两个区域之所以重要,是因为当永久空间填满一个完整的GC时(我怀疑这个大小正在增长),当eden空间填满,而survivor空间中没有足够的空间来复制所有剩余的对象时,一个完整的GC也会被触发。
如果这是问题的原因,除非您可以减少创建的数量,否则您正在创建大量的中等存活对象,这很可能是一个性能问题。另一种选择是指定一个更大的新大小,这会增加伊甸园的大小。
试试-mx12g -XX:NewSize=10g - verbosegc
最后一个选项将为您提供清理后各个空间的大小。
https://stackoverflow.com/questions/10080657
复制相似问题