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

标签 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

最佳答案

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

关于java - 为什么最大堆在运行时发生变化?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49406749/

相关文章:

c - malloc_usable_size() 返回错误的大小

python-3.x - 运行 300000 行的 csv 时 python 中的内存错误

无法弄清楚为什么我的程序断言

java - 通知点击事件而不显示 Activity ?

Javasound:AudioSystem.getAudioInputStream 在服务器上失败,在客户端代码中工作

java - 如何对互联网地址进行编码

java - 从套接字的输入流中读取而无需在 JAVA 中忙等待

java - 使用 sun.misc.Usafe 作为堆外内存并编写内存管理器?

c - 声明数组时出现段错误

docker 中的 Java 进程消耗的内存超过了指定的 Xmx 限制