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的主要内容,如果未能解决你的问题,请参考以下文章

PCA主成分分析算法专题Python机器学习系列(十五)

《剑指offer》专题—算法训练 day05

Linux压缩相关操作

GC 分代收集算法 VS 分区收集算法

GC 分代收集算法 VS 分区收集算法

Redis分布式寻址算法