【发布时间】:2012-04-09 22:24:32
【问题描述】:
我看到使用 -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 最大值,然后发生掉线。
谢谢, 婴儿车。
【问题讨论】:
-
假设您使用的是 64 位 JVM 是否合理?值得一问,因为 32 位 JVM 内置了 2GB 的大小限制。
-
我认为可以肯定地说它是一个 64 位 JVM,因为如果您指定的堆大小远大于 1500m(确切的限制取决于 JVM),Java 将在不运行程序的情况下终止.
-
你尝试过使用 -XX 属性吗?
-
你如何确定“内存峰值”?是来自 ps 还是通过 JMX?
-
您好,如果您向我们提供了完整的命令行以准确查看您正在设置的选项,将会对您有所帮助。如果没有命令行,就无法确定您看到所看到行为的原因。并发标记扫描收集旨在最大限度地减少收集时的暂停,因此允许堆增长得更大可能与该目标背道而驰。默认情况下,它具有最大暂停时间以及对每一代的大小和 GC 边界的限制。大多数这种行为都可以调整以满足您的需求,但其中有很多因素。
标签: java memory-management garbage-collection jvm