::我的理解

要回收垃圾,可以想象。在一块内存区域中,首先进行标记,然后进行清除。

  1. 最简单的是,标记哪块是垃圾后,在清除阶段,直接标记回收掉。即标记清除法。内存不连续
  2. 标记后,进行复制。把有用的内存块,复制保存起来。即标记复制法,内存连续,但是需要复制操作,而且需要额外开辟一半内存空间进行保存。适用于 新生代,大部分对象,都是招生熄灭的场景。
  3. 标记后,不直接进行回收,而且将存活的对象进行整理到一边,然后回收对象在一起,进行回收。即标记整理法

分代收集算法

当前虚拟机的垃圾收集都采用分代收集算法,这种算法没有什么新的思想,只是根据对象存活周期的不同将内存分为几块。一般将 java 堆分为新生代和老年代,这样我们就可以根据各个年代的特点选择合适的垃圾收集算法

分代收集算法

  1. 新生代(招生熄灭)用标记复制法,把少量存活对下复现出来
  2. [老年代], 用标记整理法或者标记清除法

增量收集算法, 待研究。是不是就是常用的垃圾收集器的实现??待确认