栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

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

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

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

目录

参考文章

四种GC算法

分代收集算法(理论)

标记清除算法

 标记整理算法

 标记复制算法

 三种算法的优缺点


参考文章

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

四种GC算法

四种算法为:

        标记清除法

        复制算法

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

        分代算法

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

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

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

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

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

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

分代收集算法(理论)

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

标记清除算法

         分为两个阶段:

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

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

 标记整理算法

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

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

 标记复制算法

        是幸存区所用的算法

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

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

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

原理如图

 在幸存区的操作

 移动完成后From和To交换

 三种算法的优缺点

参考这篇文章

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

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/679132.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号