【问题标题】:java:Why is full GC called when -Xms and -Xmx are unequal?java:为什么-Xms和-Xmx不相等时调用full GC?
【发布时间】:2017-05-08 04:12:00
【问题描述】:

我正在阅读有关 java GC 的文档

旧的或永久的内存空间已满,为了容纳新的对象或类,它需要 如果相关参数具有不同的值,则向其最大尺寸扩展。换句话说,如果 -Xms 和 -Xmx 具有不同的值,如果 Old 的大小需要从 -Xms 增加到 -Xmx 为了容纳更多对象,调用了 FullGC。类似地,如果 ‐XX:PermSize 和 ‐XX:MaxPermSize 有 不同的值,并且永久空间需要向 -XX:MaxPermSize 增加到 容纳新的 java 类时,会调用 FullGC。这可以通过始终设置 -Xms 和 -Xmx 来避免 以及 ‐XX:PermSize 和 ‐XX:MaxPermSize 为相同的值。

想知道为什么在这种情况下会调用 FullGC?有什么用?

【问题讨论】:

    标签: java garbage-collection


    【解决方案1】:

    调整堆大小不仅仅是增加更多内存的问题。 GC 使用的数据结构必须调整大小,这需要执行 FullGC 来执行此操作。

    【讨论】:

      【解决方案2】:
      • -Xms 和 -Xmx 不能确定您的应用程序需要的内存量。
      • 如果 -Xms 值与 -Xmx 不同,则会调用完整 GC 以 调整堆大小以满足应用程序的内存需求。
      • 如果上述参数相同,将避免调整大小 完全是因为您的应用程序使用堆启动 足够大。简而言之,你对 JVM 说,我的应用程序永远不需要比这更大的堆。

      【讨论】:

        猜你喜欢
        • 2013-04-11
        • 1970-01-01
        • 2011-09-03
        • 2013-01-23
        • 2020-01-29
        • 2017-09-24
        相关资源
        最近更新 更多