【JVM】四种GC算法(分代收集+三种标记算法)

目录

参考文章

四种GC算法

分代收集算法(理论)

标记清除算法

 标记整理算法

 标记复制算法

 三种算法的优缺点


参考文章

JVM的4种垃圾回收算法、垃圾回收机制与总结_我是guyue,guyue就是我O(∩_∩)O-CSDN博客_垃圾回收的四种算法Java堆内存又溢出了!教你一招必杀技【附源码】_李振良_阿良_51CTO博客JVM分代收集理论与三种标记算法_u011277123的博客-CSDN博客_分代理论JVM的4种垃圾回收算法、垃圾回收机制与总结_我是guyue,guyue就是我O(∩_∩)O-CSDN博客_垃圾回收的四种算法

四种GC算法

四种算法为:

        标记清除法

        复制算法

        标记整理法(标记压缩算法)

        分代算法

其中分代算法和其他三种算法略有不同,个人感觉前三种是真正对内存进行垃圾回收,而分代算法更算是一种思想,把堆分为三部分,然后利用三种算法分别回收

从内存效率来看(时间复杂度):复制算法>标记清除算法>标记整理算法

从内存整齐度来看                      :复制算法=标记整理算法>标记清除算法

从内存利用率来看                      :标记整理算法=标记清除算法>复制算法

从使用位置来看                          :复制算法用于新生代中,标记清除算法和标记整理算法使用于                                                           老年代中

具体这么选择的原因可以看下文对于算法不同点分析中可以看出

分代收集算法(理论)

将内存划分为新生代、老年代和永久代

标记清除算法

         分为两个阶段:

                标记阶段:标记出可以回收的对象

                清除阶段:回收被标记的对象所占用的空间

 标记整理算法

        建立在标记整理算法的基础上,在标记可回收对象后将所有存货的对象移动到内存的一段,使他们紧凑的排列在一起,然后对其他的内存进行回收

        本质是:移动+删除(与后面复制算法进行区分)

img

 标记复制算法

        是幸存区所用的算法

        把内存划分为两个相等的区域,每次只使用一个区域,另一个区域为空。垃圾回收是,便利当前使用的区域,把存活的对象复制到为空的那一部分区域,然后对非空(要清理的这部分区域)的数据全部进行清理,这样原先非空的区域就变成了空的区域,原先空的区域就变成了非空的区域

        在幸存区中,会把所有的数据从From区移动到To区,然后将伊甸园区中未被回收的数据放在To区,然后清理所有From区的数据,这样原先的To区就变成了From区,原先的From区就变成了To区

        本质是:复制+删除(与前面标记整理算法进行区分)

原理如图

img

 在幸存区的操作

 移动完成后From和To交换

 三种算法的优缺点

参考这篇文章

JVM分代收集理论与三种标记算法

 标记复制算法一般会比其它两种算法快十倍左右。当继续存活的对象比较少时,应当使用标记复制算法。在新生代中,根据经验值,98%的对象在第一次GC时就会被回收,所以适合使用标记复制算法。老年代中,对象已经存活了很长时间,这一轮GC中被回收的概率较低,此时,为了避免不断将对象进行复制的开销,应当使用标记清除或标记整理算法。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值