java - 如何确定 Java 堆的大小

标签 java heap-memory strict sizing

我知道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/

相关文章:

haskell - 避免二叉树构造中的堆栈溢出

java - 无法在 IntelliJ Idea 2017.3.4 上使用 Maven 创建 RESTful Web 服务

java - 如何处理 Out Fault 拦截器中的运行时异常,Apache CXF

java - Java wait(), notify() 的实现与锁有很大不同吗?

java - fragment UI 元素为空

java - Intellij 堆大小,初始堆大小设置为大于最大堆大小的值

perl - 在严格模式下将 STDIN 分配给变量

c# - C#中继承对象的内存分配

c++ - 是否存在与堆内存分配相关的内存开销(例如堆中的标记)?

php - 错误消息 "Strict standards: Only variables should be passed by reference"