我们有一个在 openjdk8 中运行的 Java 应用程序,它的最大堆内存在运行时发生变化 - 这可能是什么原因?
我找到了问题 Why the heap is changing in java这指向解释 max
和 committed
内存之间区别的文章。在我们的例子中,这两个似乎通常是相同的,但并非总是如此 - 请参阅下面的屏幕截图中的 11:53。
堆也可以更改为年轻代串行收集器(-XX:MaxHeapFreeRatio
,参见Encourage the JVM to GC rather than grow the heap?),但是我们使用并行收集器,所以情况并非如此。
我们运行应用程序时使用的与内存相关的 JVM 参数:
-XX:MaxMetaspaceSize=200M -Xms2000m -Xmx2000m
不确定是否相关,应用程序在 11:55 到 11:58 之间对旧代执行并行标记扫描 - 此时有超过 200MB 的可用内存可用,我们看不出这种行为的任何原因。
最佳答案
您正在使用默认启用自适应大小策略的并行 GC。
如果您不希望堆代调整大小,请设置 -XX:-UseAdaptiveSizePolicy
。
关于java - 为什么最大堆在运行时发生变化?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49406749/