引用计数算法

JVM垃圾收集算法图 - 图1

JVM垃圾收集算法图 - 图2

引用计数算法会引起循环引用

JVM垃圾收集算法图 - 图3

标记&清除算法

标记并清除算法容易引起内存空隙,即便内存的剩余空间足够,当没有适合的位置放置大对象。标记的是可达的对象,而不是垃圾对象。
在一些算法实现中会将不同尺寸的间隙地址通过链表关联在以前,并通过映射表来标识哪些地址的尺寸,这样就避免遍历所有的间隙。

JVM垃圾收集算法图 - 图4

标记&压缩&清除算法

压缩避免了间隙的生成,但是也增加了垃圾收集的时间。

JVM垃圾收集算法图 - 图5

复制算法

复制算法适合大部分对象都是垃圾,而需要复制的活跃对象不多的场景。这样相比压缩更有效率。但是需要多冗余一个空间交换数据。一般适用于新生代。

JVM垃圾收集算法图 - 图6

分代收集算法

分代策略则是一种按照对象生命长短分而治之的策略,这样不同代的对象又可以采用不同的算法。
JVM垃圾收集算法图 - 图7

增量收集算法

将标记操作分成多个阶段,并将标记线程与应用线程并行执行

分区收集算法

将对象放在内存分片中,因此不用锁住所有区域,只需要锁住部分需要GC的区域