我知道Java VM有“-XMx”和“-XMs”用于设置堆的大小。它还具有一个称为“人体工程学”的功能,可以智能地调整堆的大小。但是,我手头有一个问题,需要严格固定大小的堆。
这是命令行参数:
"-Xms2m -Xmx2m -XX:+PrintGCDetails"
但是,通过观察GC日志,堆的大小似乎并没有固定为2048K。参见,例如2368K、2432K、2176K 等:
[GC [PSYoungGen: 480K->72K(704K)] 1740K->1332K(2368K), 0.0032190 secs] [Times: user=0.00 sys=0.00, real=0.01 secs]
[GC [PSYoungGen: 560K->64K(768K)] 2094K->1598K(2432K), 0.0033090 secs] [Times: user=0.00 sys=0.00, real=0.01 secs]
[GC [PSYoungGen: 544K->32K(768K)] 1675K->1179K(2176K), 0.0009960 secs] [Times: user=0.00 sys=0.00, real=0.00 secs]
有没有办法对 Java 堆进行“严格大小调整”(不多也不少)?
最佳答案
我相信 JVM 会按照您的预期管理堆,但示例中的问题是最大堆大小因太小而被有效忽略。
在 Sun 的 Windows JVM 版本 1.6.0_06 上,我认为最小“最大堆大小”约为 6MB(即 -Xmx6m)。如果您尝试设置低于此值,堆实际上可能会变得更大。 (我原以为最小值是 16m,但一些实验表明低至 6m 的值似乎也有效。)
但是,如果您设置 -Xms8m 和 -Xmx8m,我想您会发现堆保持该大小。
关于java - 如何确定 Java 堆的大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/632716/