乐趣区

关于java:深入理解JVM五垃圾收集算法

1. 标记 - 革除算法

2. 复制算法

3. 标记 - 整顿算法

4. 分代收集算法

1. 标记 - 革除算法
最简略的还是标记 - 革除算法,它的做法是首先依据可达性剖析算法,标记出所有须要回收的对象,在标记实现后对立回收所有被标记的对象。
如图所示:

咱们能够看出,在收集完垃圾之后,内存会产生大量不间断的碎片,当前调配对象时,可能会造成内存不足。

长处:实现简略。
毛病:
效率问题:标记和革除两项效率都不高
空间问题:标记革除后会产生大量不间断的内存碎片,当前调配较大对象时,可能会导致无奈失去间断内存而登程另一次垃圾收集操作。

2. 复制算法
复制算法的特点是。咱们先将内存容量按等同大小划分成两块,每次只应用其中的一块,当这一块内存用完了,就将还存活的对象复制到另外一块下面,而后再把曾经应用过的内存空间一次性清理掉。

长处:不会产生内存碎片。
毛病:
可用空间会降落至原来的一半。

咱们之前解说 GC 过程的时候,呈现了两个 survivor 区域,用的就是这个算法。
深刻了解 JVM(三)——堆的构造,GC 过程以及调优参数简介

3. 标记 - 整顿算法
咱们先标记要回收的对象,而后将存活的对象往一端挪动,最初间接清理掉端边界以外的内存。

长处:解决内存碎片问题。

毛病:整顿阶段,因为挪动了可用对象,须要去更新援用。

4. 分代收集算法

以后虚拟机都采纳这种算法,依据对象存活的周期把不同的内存划分成几块,而后采纳各个年代最适宜的收集算法。
新生代中,每次都有大量对象死去,就采纳复制算法。
老年代中存活率高,没有额定空间进行调配担保,就是用标记 - 整顿,或者标记 - 清理算法进行回收。

明天咱们介绍了几种垃圾回收算法,以及他们的优缺点。

退出移动版