为什么最大堆在运行时会发生变化?

2022-09-03 15:29:11

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

我发现问题为什么堆在java中正在变化,这指向了解释内存和内存之间差异的文章。似乎在我们的例子中,这两者通常是相同的,但并非总是如此 - 请参阅下面的屏幕截图中的11:53。maxcommitted

堆也可以改为年轻一代串行收集器(请参阅鼓励JVM到GC而不是增长堆?),但是我们使用并行收集器,所以情况并非如此。-XX:MaxHeapFreeRatio

我们用来运行应用程序的内存相关 JVM 参数:

-XX:MaxMetaspaceSize=200M -Xms2000m -Xmx2000m

不确定它是否相关,该应用程序在11:55和11:58之间对旧一代进行并行标记扫描 - 此时有超过200MB的可用内存可用,我们看不到任何原因。

Heap Memory Mark Sweep Count


答案 1

您使用的是并行 GC,默认情况下它启用了自适应大小策略。
如果不希望堆代调整大小,请进行设置。-XX:-UseAdaptiveSizePolicy


答案 2