JVM什么时候会触发主要的垃圾回收?
When will JVM trigger major garbage collection?
我想了解垃圾回收的工作原理。我清楚以下几点:
- JVM分配对象失败时会触发minor GC
年轻一代。
- 列表项
JVM会触发full GC(minor+major GC)
堆已满。
但是,新生代和老年代的对象不再被引用,符合GC条件,但没有触发GC(即young/old代堆space不是已满,因此不会发生 GC)
这是否意味着这些对象将保留在 young/old 生成堆中 space 直到发生 GC?
我的阅读材料
是的,如果没有 GC,那么对象将存在于堆中。
实际上,即使在 GC 之后,如果对象在年轻代,它也会存在于堆中,直到它被覆盖,如果是旧代,则取决于算法——但这仅从安全角度来看很有趣。
it still remains in the old generation and the overall heap usage increases until a full/major GC comes along. The ops team is monitoring the heap usage and they are concerned of the growing heap.
如果您的目标是监控活动对象的数量,例如要检测泄漏,那么您应该在主要 GC 之后立即测量堆占用率,而不是在它们之间。
例如可以从 GC 日志文件中提取信息。
JVM will trigger full GC(both minor+major GC) when the heap is full.
不一定是这样。何时触发收集的决定基于考虑各种目标(例如暂停时间和吞吐量)的试探法。
我想了解垃圾回收的工作原理。我清楚以下几点:
- JVM分配对象失败时会触发minor GC 年轻一代。
- 列表项
JVM会触发full GC(minor+major GC) 堆已满。
但是,新生代和老年代的对象不再被引用,符合GC条件,但没有触发GC(即young/old代堆space不是已满,因此不会发生 GC)
这是否意味着这些对象将保留在 young/old 生成堆中 space 直到发生 GC?
我的阅读材料
是的,如果没有 GC,那么对象将存在于堆中。
实际上,即使在 GC 之后,如果对象在年轻代,它也会存在于堆中,直到它被覆盖,如果是旧代,则取决于算法——但这仅从安全角度来看很有趣。
it still remains in the old generation and the overall heap usage increases until a full/major GC comes along. The ops team is monitoring the heap usage and they are concerned of the growing heap.
如果您的目标是监控活动对象的数量,例如要检测泄漏,那么您应该在主要 GC 之后立即测量堆占用率,而不是在它们之间。
例如可以从 GC 日志文件中提取信息。
JVM will trigger full GC(both minor+major GC) when the heap is full.
不一定是这样。何时触发收集的决定基于考虑各种目标(例如暂停时间和吞吐量)的试探法。