JVM的 GC过程
![图片[1]- 卡尼奶资源网JVM的 GC过程?- 卡尼奶资源网卡尼奶资源网-萧囡资源网-QQ活动_资源分享-源码基地-项目分享-安卓绿色软件基地](https://www.knnzy.cn/wp-content/uploads/2026/01/image-57.png)
大量的对象被分配在eden区,eden区满了后会触发minor gc,可能会有99%以上的对象成为垃圾被回收掉,剩余存活 的对象会被挪到为空的那块survivor(幸存者)区,下一次eden区满了后又会触发minor gc,把eden区和survivor区垃圾对象回收,把剩余存活的对象一次性挪动到另外一块为空survivor区,因为新生代的对象都是朝生夕死的,存活时间很短,所 以JVM默认的8:1:1的比例是很合适的,让eden区尽量的大,survivor区够用即可。
①、大对象直接进入老年代
②、长期存活对象将进入老年代 老年代空间分配担保机制:
1、年轻代每次 minor gc 之前JVM都会计算下老年代 剩余可用空间
2、如果这个可用空间小于年轻代里现有的所有对象大小之和( 包括垃圾对象 )就会看一个“-XX:-HandlePromotionFailure”(jdk1.8默认就设置了)的参数是否设置了
3、如果有这个参数,就会看看老年代的可用内存大小,是否大于之前每一次minor gc后进入老年代的对象的 平均大小 。
4、如果上一步结果是小于或者之前说的参数没有设置,那么就会触发一次Full gc,对老年代和年轻代一起回收一次垃圾,
5、如果回收完还是没有足够空间存放新的对象就会发生”OOM” 6、当然,如果minor gc之后剩余存活的需要挪动到老年代的对象大小还是大于老年代可用空间,那么也会触发full gc,full,gc完之后如果还是没有空间放minor gc之后的存活对象,则也会发生“OOM“
![图片[2]- 卡尼奶资源网JVM的 GC过程?- 卡尼奶资源网卡尼奶资源网-萧囡资源网-QQ活动_资源分享-源码基地-项目分享-安卓绿色软件基地](https://www.knnzy.cn/wp-content/uploads/2026/01/image-58.png)





















暂无评论内容