一、原理
在整理压缩阶段,不再对标记的对象回收,而是通过所有存活对象都向一端移动。可以看到,标记的存活对象将会被整理,按照内存地址依次排列。如此一来,当我们需要给新对象分配内存时,JVM只需要持有一个内存的起始地址即可,这比维护一个空闲列表显然少了许多开销。
标记整理算法不仅可以弥补标记清除算法中,内存区域分散的缺点,也消除了复制算法当中,内存减半的高额代价。
二、劣势
标记整理算法唯一的缺点就是效率不高,不仅要标记所有存活的对象,还要整理所有存活对象的引用地址。从效率上来说,标记整理算法的效率要低于复制算法。