1. 标记 - 革除算法
2. 复制算法
3. 标记 - 整顿算法
4. 分代收集算法
1. 标记 - 革除算法
最简略的还是标记 - 革除算法,它的做法是首先依据可达性剖析算法,标记出所有须要回收的对象,在标记实现后对立回收所有被标记的对象。
如图所示:
咱们能够看出,在收集完垃圾之后,内存会产生大量不间断的碎片,当前调配对象时,可能会造成内存不足。
长处:实现简略。
毛病:
效率问题:标记和革除两项效率都不高
空间问题:标记革除后会产生大量不间断的内存碎片,当前调配较大对象时,可能会导致无奈失去间断内存而登程另一次垃圾收集操作。
2. 复制算法
复制算法的特点是。咱们先将内存容量按等同大小划分成两块,每次只应用其中的一块,当这一块内存用完了,就将还存活的对象复制到另外一块下面,而后再把曾经应用过的内存空间一次性清理掉。
长处:不会产生内存碎片。
毛病:
可用空间会降落至原来的一半。
咱们之前解说 GC 过程的时候,呈现了两个 survivor 区域,用的就是这个算法。
深刻了解 JVM(三)——堆的构造,GC 过程以及调优参数简介
3. 标记 - 整顿算法
咱们先标记要回收的对象,而后将存活的对象往一端挪动,最初间接清理掉端边界以外的内存。
长处:解决内存碎片问题。
毛病:整顿阶段,因为挪动了可用对象,须要去更新援用。
4. 分代收集算法
以后虚拟机都采纳这种算法,依据对象存活的周期把不同的内存划分成几块,而后采纳各个年代最适宜的收集算法。
新生代中,每次都有大量对象死去,就采纳复制算法。
老年代中存活率高,没有额定空间进行调配担保,就是用标记 - 整顿,或者标记 - 清理算法进行回收。
明天咱们介绍了几种垃圾回收算法,以及他们的优缺点。