为什么max heap在运行时会发生变化?
我们有一个在openjdk8中运行的Java应用程序,其最大堆内存在运行时更改 – 可能是什么原因?
我发现问题为什么堆在java中发生了变化,这指的是解释max
和committed
memory之间差异的文章。 在我们的例子中,似乎这两个通常是相同的,但并非总是如此 – 请参阅下面截图的11:53。
堆也可以更改为年轻代串行收集器( -XX:MaxHeapFreeRatio
,请参阅鼓励JVM到GC而不是增长堆? ),但是我们使用并行收集器,所以情况并非如此。
我们运行应用程序的内存相关JVM参数:
-XX:MaxMetaspaceSize=200M -Xms2000m -Xmx2000m
不确定它是否相关,应用程序在11:55到11:58之间对老一代进行了并行标记扫描 – 此时有超过200MB的可用内存可用,我们看不出任何这种行为的原因。
您正在使用默认情况下启用自适应大小策略的并行GC。
如果您不希望堆生成resize,请设置-XX:-UseAdaptiveSizePolicy
。