YoungGC和FullGC的触发条件是什么?
先说结论: ==YoungGC 的出发条件比较简单 —— 年轻代中的 Eden 区分配满后就会触发==
FullGC 的出发条件比较复杂,有以下几种
- 老年代空间不足
- 创建一个大对象,超过指定阈值会直接保存在老年代中,如果老年代空间也不足,会触发 FullGC
YoungGC
之后,发现要移到老年代的对象,老年代存不下的时候,会触发一次FullGC
- 空间分配担保失败
- ** #空间分配担保 :** 在youngGC之前。先检查老年代最大可用的连续空间是否大于所有年轻代对象的总大小,如果大于就说明youngGC安全,不会FullGC.如果小于,检查handlePromotionFailture,如果是false,则直接FullGC.如果是true,继续检查老年代最大可用连续空间是否大于历次晋升到老年代的对象的平均大小,如果大与则进行youngGC,是有风险的,如果小于直接FullGC.
- 永久代空间不足
- 代码中执行
System.gc()
- 代码中执行
System.gc()
的时候,会触发FullGC
,但不保证一定会立即触发
- 代码中执行
- Title: YoungGC和FullGC的触发条件是什么?
- Author: cccs7
- Created at : 2025-04-07 22:40:00
- Updated at : 2025-04-07 23:09:28
- Link: https://cs7eric.github.io/2025/04/07/YoungGC和FullGC的触发条件是什么?/
- License: This work is licensed under CC BY-NC-SA 4.0.
Comments