【问题标题】:what causes java minor gc是什么导致java小gc
【发布时间】:2012-02-16 23:31:08
【问题描述】:

我说的是 UseParNewGC。我对 java gc minor 集合的理解是这样的。当 jvm 检测到 eden 已满(或无法满足分配请求)

  1. 它会停止所有应用线程
  2. 计算伊甸园和一个幸存者空间中的活动对象,并将它们移动到另一个
  3. 如果没有足够的空间进行移动,或者如果幸存者中的对象足够老,它会升级到老一代。
  4. 将伊甸园和清理后的幸存者标记为空
  5. 恢复应用程序线程。

完全正确吗?是否存在即使eden未满也会触发minor gc的情况?

【问题讨论】:

  • 伊甸园和原始幸存者空间被清空,它们不仅被标记为空,还被空值(或其他更合适的值)覆盖。

标签: java garbage-collection jvm


【解决方案1】:

我认为您的流程是正确的。在某些情况下,主 GC 被触发的原因不是完整的伊甸园空间,例如调用 System.gc() 或 RMI。在这种情况下,还将运行次要 GC。

【讨论】:

  • 我实际上只是在询问次要 gc。 PS:我没有 system.gc 调用或 RMI。
  • 除了您列出的规则之外,一些 JVM 实现可能会决定增加年轻代而不是执行次要收集,或者除了执行次要收集之外。此外,伊甸园“满”的定义可能取决于具体情况或可通过虚拟机参数进行调整。这些规则有时非常复杂,对于 Sun/Oracle JVM,如果您筛选长文档,您可以在此处找到一些详细信息:oracle.com/technetwork/java/javase/gc-tuning-6-140523.html
【解决方案2】:

当 jvm 检测到 eden 已满(或者它无法满足分配请求) 在某种程度上,是的。但它会动态调整生成大小以满足收集器的某些目标。主要是 GC 所花费的暂停时间和 CPU 时间的一部分。

因此,这些目标间接地决定了次要收集发生的频率。主要收集也可能在运行之前触发次要收集,以减少对旧对象的短期年轻对象的引用。

【讨论】:

    猜你喜欢
    • 2016-04-15
    • 1970-01-01
    • 1970-01-01
    • 2013-08-13
    • 2010-12-31
    • 2013-03-10
    • 2011-03-12
    相关资源
    最近更新 更多