【问题标题】:Why max heap is changing at runtime?为什么最大堆在运行时发生变化?
【发布时间】:2018-08-30 14:20:28
【问题描述】:

我们有一个在 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 的可用内存可用,我们看不出这种行为的任何原因。

【问题讨论】:

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

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


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 2013-07-02
    • 2015-09-14
    • 2018-07-31
    • 1970-01-01
    • 1970-01-01
    • 2020-07-06
    • 1970-01-01
    • 2021-05-15
    相关资源
    最近更新 更多