JVM垃圾回收机制:从Eden到老年代的GC过程解析
在JVM的垃圾回收过程中,大量对象首先被分配在Eden区。当Eden区空间不足时,会触发Minor GC。此时,大约99%以上的对象被视为垃圾并回收,剩余存活对象则被转移到一块空闲的Survivor区。下一次Eden区满时,再次触发Minor GC,对Eden区和当前Survivor区进行垃圾回收,并将存活对象一次性移至另一块空闲Survivor区。由于新生代对象生命周期短暂,JVM默认的8:1:1比例(Eden:Survivor:Survivor)非常合理,既保证了Eden区足够大,又使Survivor区满足需求。
![图片[1]- 卡尼奶资源网卡尼奶资源网-萧囡资源网-QQ活动_资源分享-源码基地-项目分享-安卓绿色软件基地](http://www.rulenetrs.com/wp-content/uploads/2026/01/image-57.png)
关键机制包括:
![图片[2]- 卡尼奶资源网卡尼奶资源网-萧囡资源网-QQ活动_资源分享-源码基地-项目分享-安卓绿色软件基地](http://www.rulenetrs.com/wp-content/uploads/2026/01/image-58.png)
- 大对象直接进入老年代:避免大对象在新生代频繁复制。
- 长期存活对象晋升老年代:对象经过多次Minor GC后仍存活,则移至老年代。
- 老年代空间分配担保机制:每次Minor GC前,JVM检查老年代剩余可用空间。若空间小于新生代所有对象总大小(含垃圾),则判断是否设置了“-XX:-HandlePromotionFailure”参数(JDK 1.8默认开启)。若参数存在,比较老年代可用内存与之前每次Minor GC后进入老年代的对象平均大小。若条件不满足或参数未设置,则触发Full GC,同时回收老年代和年轻代。若Full GC后仍无足够空间,则抛出“OOM”错误。此外,若Minor GC后存活对象大小大于老年代可用空间,也会触发Full GC;若Full GC后仍无法容纳,则同样导致“OOM”。
本站代码模板仅供学习交流使用请勿商业运营,严禁从事违法,侵权等任何非法活动,否则后果自负!
为这篇文章评分
0人
0人
0人
0人
0人
© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END























暂无评论内容