标记-清除算法
算法核心思想很简单,就是对可回收对象进行标记,然后直接由垃圾收集器回收即可。如图,这就产生了一个问题,内存中的空间变得离散化,即内存碎片(对象的分配需要找到一片足够大小的连续内存空间,如果不足,还是会触发GC)。
复制算法
复制算法的核心就是,只使用一半内存用来分配对象,当使用的区域不足以分配时,复制算法将存活对象复制到预留的一半空间,并且是顺序排列的,然后清除本区域。
优点:没有内存碎片
缺点:内存使用率急剧下降!!
标记-整理算法
该算法很相似与标记清除,实际上这是为了解决标记-清除算法所带来的内存碎片问题而改进的算法。
同样对回收对象进行标记,清除后添加了对于存活对象全部向内存一段移动的操作。
分代收集算法
这种算法实际上就是组合使用上述算法。
新生代使用复制算法,因为新生代98%的对象都是朝生夕死(当然Hotspot中并没有直接对半分,而是分为一个Eden和两个survivor区,Eden与survivor比例为8:1),老年代采用标记整理或者标记清除算法。