Day339.垃圾回收相关算法 -JVM
Posted 阿昌喜欢吃黄桃
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Day339.垃圾回收相关算法 -JVM相关的知识,希望对你有一定的参考价值。
垃圾回收相关算法
GC主要针对的是:堆空间
频繁收集新生代,较少收集养老带,几乎不动元空间(JDK8为例)
在堆空间中主要存放的是对象,那接下来,如何判断这个对象是否存活??????
一、对象存活判断阶段
二、引用计数算法
1、概述
什么是引用计数算法,简单来说:就一引用计数器,有引用指向他,他就加1,没有就减1,为0就被回收
2、循环引用
也就是互相引用,导致计数器永远无法变为0
- 图示
- 代码
- 总结
三、可达性分析算法(根搜索算法、追执性垃圾收集)
1、概述
2、图示
3、GC Roots
4、注意
一致性快照:就是某一刻的静止状态,不能分析时状态还在变化
四、对象的finalization机制
对象在进行回收之前,进行的方法调用
他被定义在Object类中,他没有被final修饰,也没有private修饰,代表我们能重写这个方法
五、MAT与JProfiler的GC Roots溯源
1、概述
2、获取dump文件
①命令行使用jmap
②使用JVisualVM导出
六、垃圾清除阶段
七、标记-清除(Mark-Sweep)算法
1、背景&执行过程
在标记环节:标记的是非垃圾对象(可达对象)
在清除环节: 清除那些没标记的对象,将他们清除
2、图示
标记可达对象,清除未标记对象(非可达对象)
3、缺点
八、复制算法
1、背景&核心思想
2、图示
3、优缺点
4、应用场景
在堆空间新生代中使用十分的贴合他的优点,要求存活的少,垃圾多的情况【朝生夕死】
九、标记-压缩(整理)算法
1、背景
2、执行过程
先进行标记可达对象,接下来就对非可达对象清除,然后整理可达对象,避免了内存碎片问题
3、指针碰撞
4、优缺点
十、小结
1、垃圾清除阶段算法对比【对比三种算法】
没有最好的算法,只有最优的算法
Mark-Compact【标记-压缩】 | Mark-Sweep【标记-清除】 | Copying【复制】 | |
---|---|---|---|
速度 | 最慢 | 中等 | 最快 |
空间开销 | 少(不存在内存碎片) | 少(会有内存碎片) | 使用2倍空间(不存在内存碎片) |
移动对象 | 是 | 否 | 否 |
分配对象空间方式 | 指针碰撞 | 空闲列表 | 指针碰撞 |
2、分代收集算法
他不是一个真正的算法,具体问题具体分析算法
针对新生代使用复制算法,针对老年代使用首先使用标记-清除算法,当内存回收不佳时使用标记-整理算法
十一、增量收集算法、分区算法
他们都关注的是停顿时间(STW)
1、增量收集算法
用来处理用户线程 和 垃圾回收线程交替的问题
2、分区算法
将堆空间分成一个一个的小块
十二、尾声
以上是关于Day339.垃圾回收相关算法 -JVM的主要内容,如果未能解决你的问题,请参考以下文章