JVM垃圾回收

如何判断对象可以被回收

Java虚拟机采用可达性分析算法,即从一个根节点向下搜索所有节点,当一个对象无法到达时(孤岛),就判断该对象是可回收对象。

在这里插入图片描述

怎么回收对象

标记-清除对象算法
这个算法分为两个阶段:标记和清除,在内存中标记哪些对象是可以被回收的,在标记完成后,统一回收这些被标记的对象。

这么做的很大一个问题是,使得可用的内存区域变得十分零散不连续,如果要分配一个内存区域时,无法提供足够的连续内存而不得不触发另一次的垃圾回收。

在这里插入图片描述
复制算法
这种算法是将内存划分为大小相等的两块区域,每次只使用其中的一块,当要进行垃圾回收时,将存活的对象直接复制到另一块空闲的内存,而刚刚的那块内存直接全部清除,效率高但是按1:1划分很浪费空间。

在这里插入图片描述
对于大多数对象都是“新生代”对象,即生命期很短,从而将内存划分为8:1:1,一块大内存Eden两块小内存Survivor,每次都是使用Eden和其中一块Survivor,当进行垃圾回收时,把存活对象复制到另外一块空闲的Survivor,将Eden和之前的Survivor清除。但是当Survivor无法存放所有的存活对象时,通常是将这些对象分配到“老年代”或者有额外空间进行担保。

标记-整理算法
标记过程与之前的一样,标记完成后,让存活对象向内存的一端移动,然后清除掉剩余区域。
在这里插入图片描述
分代收集算法
Java堆根据对象的存活周期划分为“新生代”和“老年代”。对于新生代,存活周期较短,可以使用复制算法。对于老年代,存活周期长,显然复制算法是不适合的(没有额外空间进行担保),使用标记-清除或者标记-整理算法。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值