“标记-清扫”:从堆栈和静态存储区出发,遍历所有的引用,进而找出所有存活的对象,每当找到一个存活对象,就会给对象设一个标记,这个过程不会回收任何对象,只有全部标记工作完成的时候,清理动作才会开始,在清理过程中,没有标记的对象,将被释放,不会发生任何复制动作,所有剩下的堆空间是不连续的,垃圾回收器要是希望得到连续的空间,就得重新整理剩下的对象。这种方式在只会产生少量垃圾或者不会产生垃圾时,速度是很快的。
“停止-复制”:这种垃圾回收动作不是在后台进行,在回收时程序将被暂停,然后将所有存活的对象从当前堆复制到另一个堆,没有被复制的全部都是垃圾,当对象被复制到新堆时,它们是一个挨着一个的,所有以新堆保持紧凑排列,然后就可以按指针碰撞的方式来快速的分配空间。对于这种复制式的回收器而言,效率不是很高,主要由2原因,1、需要有2个堆,然后在这两个分离的堆之间来下复制,而且得维护比实际需要多一倍的空间,2、复制式回收器会将所有内存自一处复制到另一处,也是很消耗时间的。