【问题标题】:Does Java G1 garbage collector respect MaxHeapFreeRatio parameter?Java G1 垃圾收集器是否尊重 MaxHeapFreeRatio 参数?
【发布时间】:2020-03-11 20:23:48
【问题描述】:

Java G1 垃圾收集器(在 Open JDK 中实现)是否尊重 -XX:MaxHeapFreeRatio=n JVM 参数?

它在 Java 8 中是否尊重它?

我发现 JEP 346: Promptly Return Unused Committed Memory from G1 在 Java 12 中交付,但我不清楚它之前的状态是什么。

【问题讨论】:

  • 所以你的问题是 only 在 java-12 之前,我猜?
  • @Eugene 不,问题是针对 Java 8、11、13,只是答案可能因版本而异。
  • 如果重要的话,我已经用广泛的参考更新了我的答案。但底线很简单:该标志确实很重要,在多大程度上:取决于确切的VM版本,给予VM的初始标志。

标签: java garbage-collection g1gc


【解决方案1】:

我找到的一个非权威答案是基于https://bugs.openjdk.java.net/browse/JDK-8078039?focusedCommentId=13632717&page=com.atlassian.jira.plugin.system.issuetabpanels%3Acomment-tabpanel#comment-13632717

最值得注意的是,有些 GC 支持它,有些不支持。这个RFE没有说 使用哪个 GC,所以我假设我们正在谈论默认 GC 支持 MaxHeapFreeRatio。 G1 也支持此选项。

要缩小堆(并释放内存),需要完整的 GC。它的 应用程序不会手动触发完整的 GC,可能需要一段时间 在 JVM 触发之前。

所以答案是(对于 Java 8):是的……但不是。

  • 是的,它支持选项
  • 但仅在发生完全 GC 时,这可能永远不会

(我仍然好奇是否有更权威的来源以及在更现代的 JVM 中的当前状态是什么)

【讨论】:

    【解决方案2】:

    我不知道比源代码更权威的答案,是的,你的答案是正确的 - 内存释放只会在 Full GC 之后发生(至少在该 JEP 之前) )。

    对于 java-8:

    这个论点很重要,看here for example

    该代码理解起来并不复杂,here 是实际发生的收缩。

    如需更广泛的答案(关于 java-11,但仍适用于 java-8),请阅读this

    底线是 - 该标志确实很重要,但具体如何取决于实现。您的问题没有简单的答案。

    【讨论】:

      猜你喜欢
      • 2017-05-24
      • 1970-01-01
      • 2011-03-18
      • 2019-02-08
      • 2014-02-19
      • 2016-05-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多