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

Java 为什么最大堆在运行时发生变化?,java,memory,memory-management,java-8,jvm,Java,Memory,Memory Management,Java 8,Jvm,我们有一个在openjdk8中运行的Java应用程序,它的最大堆内存在运行时会发生变化——这可能是什么原因 我发现了一个问题,它指向解释max和committed内存之间差异的文章。在我们的例子中,这两个似乎通常是相同的,但并不总是相同的——见下面11:53的截图 堆也可以更改为年轻一代串行收集器(-XX:MaxHeapFreeRatio,请参阅),但是我们使用并行收集器,因此情况并非如此 运行应用程序时使用的与内存相关的JVM参数: -XX:MaxMetaspaceSize=200M-Xms2

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

我发现了一个问题,它指向解释
max
committed
内存之间差异的文章。在我们的例子中,这两个似乎通常是相同的,但并不总是相同的——见下面11:53的截图

堆也可以更改为年轻一代串行收集器(
-XX:MaxHeapFreeRatio
,请参阅),但是我们使用并行收集器,因此情况并非如此

运行应用程序时使用的与内存相关的JVM参数:

-XX:MaxMetaspaceSize=200M-Xms2000m-Xmx2000m

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


您使用的是默认启用自适应大小策略的并行GC。

如果不想调整堆生成的大小,请设置
-XX:-UseAptiveSizePolicy

该问题缺少JVM选项和相关GC日志。顺便说一句,
-XX:+UseAptiveSizePolicy
默认为启用。@apangin我已向该问题添加了JVM选项。我们的GC日志记录被禁用,因此我无法为这种情况提供它们。我们必须启用它们,然后等待这种情况再次发生。因此,您正在使用默认启用自适应大小策略的并行GC。设置
-XX:-如果您不想调整堆生成的大小,请使用AdaptiveSizePolicy
。@apangin为什么这不是答案?这正是OP所要求的