为什么max heap在运行时会发生变化?

时间:2018-03-21 12:48:42

标签: java memory memory-management java-8 jvm

我们有一个在openjdk8中运行的Java应用程序,其最大堆内存在运行时发生变化 - 可能是什么原因?

我发现问题Why the heap is changing in java指的是解释maxcommitted记忆之间差异的文章。在我们的例子中,似乎这两个通常是相同的,但并非总是如此 - 请参阅下面截图的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的可用内存可用,我们看不出任何这种行为的原因。

Heap Memory Mark Sweep Count

1 个答案:

答案 0 :(得分:10)

您正在使用默认启用自适应尺寸政策的并行GC 如果您不希望堆生成调整大小,请设置-XX:-UseAdaptiveSizePolicy