java - 峰值内存使用不超过限制

标签 java memory-management garbage-collection jvm

我看到使用 -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就掉线(major collection)。 Old Gen 达到 1.5G max,然后发生下降。

谢谢, 婴儿车。

最佳答案

您有三个内存区域,eden、survivor 和 tenured 空间。

我怀疑正在发生的事情是,随着您增加最大大小,tenured 或 eden 空间没有增长。

这两个区域很重要的原因是当 tenured 空间填满时触发 Full GC(我怀疑这个大小正在增长)当 eden 空间填满并且幸存者空间中没有足够的空间来复制所有剩余的对象时, 也会触发 full GC。

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

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

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

关于java - 峰值内存使用不超过限制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10080657/

相关文章:

java - 内部类操作的静态方法

java - 我如何为 Rhino 的 ScriptableObject 定义静态属性?

javafx-2 - 如何在 javafx2 中的 TextField 上的 focusOut 上打印一些内容

c - 正确释放在其他函数中分配的内存空间

memory-management - KVM 中的动态内存分配

Java DateFormat 未正确解析我的 SimpleDateFormat

c - 释放结构数组的内存

java - 为什么 JavaFX 媒体播放器崩溃?

java - 本例中有多少对象符合垃圾收集器的条件

c# - 我的控件没有被正确处理?