我试图了解垃圾收集的工作原理。我很清楚以下几点:
JVM将在何时触发完整的GC(次要+主要GC) 堆已满。
但是,年轻一代和老一代的对象如何不再参考,有资格获得GC,但没有GC触发(即年轻/老一代堆空间不满,因此没有GC发生)< / p>
这是否意味着这些对象将保留在年轻/老一代堆空间中,直到发生GC?
我的阅读材料
答案 0 :(得分:1)
是的,如果没有GC,则对象将存在于堆中。
实际上即使GC对象存在于堆中,如果它存在于年轻代中,直到它将被覆盖,如果旧的它依赖于算法 - 但这仅从安全角度来看是有趣的。
答案 1 :(得分:1)
它仍然保留在旧一代中,整体堆使用量增加,直到完整/主要GC出现。 ops团队正在监视堆使用情况,他们担心堆不断增长。
如果您的目标是监控实时对象的数量,例如要检测泄漏,那么您应该在主要GC之后立即测量堆占用率,而不是它们之间。
例如,可以从GC日志文件中提取信息。
当堆已满时,JVM将触发完整的GC(次要+主要GC)。
不一定是这种情况。决定何时触发收集是基于考虑各种目标的启发式方法,例如暂停时间和吞吐量。