JVM何时会触发主要垃圾回收?

时间:2016-06-13 15:15:30

标签: java memory-management garbage-collection jvm

我试图了解垃圾收集的工作原理。我很清楚以下几点:

  1. 当JVM无法将对象分配给时,它将触发次要GC 年轻一代。
  2. 列表项
  3. JVM将在何时触发完整的GC(次要+主要GC)     堆已满。

    但是,年轻一代和老一代的对象如何不再参考,有资格获得GC,但没有GC触发(即年轻/老一代堆空间不满,因此没有GC发生)< / p>

    这是否意味着这些对象将保留在年轻/老一代堆空间中,直到发生GC?

    我的阅读材料

2 个答案:

答案 0 :(得分:1)

是的,如果没有GC,则对象将存在于堆中。

实际上即使GC对象存在于堆中,如果它存在于年轻代中,直到它将被覆盖,如果旧的它依赖于算法 - 但这仅从安全角度来看是有趣的。

答案 1 :(得分:1)

  

它仍然保留在旧一代中,整体堆使用量增加,直到完整/主要GC出现。 ops团队正在监视堆使用情况,他们担心堆不断增长。

如果您的目标是监控实时对象的数量,例如要检测泄漏,那么您应该在主要GC之后立即测量堆占用率,而不是它们之间。

例如,可以从GC日志文件中提取信息。

  

当堆已满时,JVM将触发完整的GC(次要+主要GC)。

不一定是这种情况。决定何时触发收集是基于考虑各种目标的启发式方法,例如暂停时间和吞吐量。