JVM GC(垃圾回收机制)

JVM的垃圾回收算法

1.标记-清除(mark-sweep)算法

        (1)标记阶段:从根集合(GC Roots)开始,递归标记所有可达的对象。

        (2)清除阶段:遍历整个堆空间,回收未被标记的对象。

        缺点:清除之后会产生内存碎片。

上述的可达表示的是GC的可达性算法:

        这个算法的基本思路就是通过一系列的称为“GC Roots”的对象作为起始点,从这些节点开始向下搜索,搜索所走过的路径称为引用链(Reference Chain),当一个对象到GC Roots没有任何引用链相连(用图论的话来说,就是从GC Roots到这个对象不可达)时(下面链接中有图),则证明此对象是不可用的。

这段解释的原文链接:https://blog.csdn.net/ystyaoshengting/article/details/104415088

2.复制(Copying)算法

        复制算法将内存分为两个区域。当活动区域用完时,将存活的对象复制到另一块区域,

        然后清空当前区域。

        (1)复制阶段:将所有存活的对象从正在使用的区域复制到空闲区域。

        (2)交换阶段:清空当前正在使用的区域,而后交换正在使用区域与空闲区域的角色。

        优点:不会产生内存碎片。

        缺点:需要使用两倍的内存空间。

3.标记-压缩(mark-Compact)算法

        该算法结合了上述两种算法的优点。它在标记阶段标记所有存活的对象,然后在压缩阶段将

        存活对象移动到对的一端,释放出连续的内存空间。

        (1)标记阶段:标记所有的存活的对象。

        (2)压缩阶段:将存活对象移动到堆的另一端,按顺序排列。释放出其余连续的内存空间。

4.分代收集算法

        分代收集算法基于对象的存活时间,将堆内存分为年轻代、老年代以及永久代。各代分别使

        用不同的收集算法。

        (1)年轻代:对象的生命周期短,频繁发生GC,使用复制算法。

        (2)年老代:对象的生命周期长,使用标记-压缩算法。

        (3)永久代:存储类的元数据(JDK8以后被元空间*(Metaspace)替代)。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值