“标记-清除”算法是一种非移动式的回收算法,而“标记-整理”算法是一种移动式的<br>
如果移动存活对象,尤其是在老年代这种每次回收,都会存在大量存活对象的区域,移动存活对象并且更新所有引用这些对象的地方是一件极为负重的操作,而且这种对象移动操作必须暂停用户应用程序才能进行,
但是如果跟“标记-清除”算法那样完全不考虑移动和整理存活对象的话,弥散于堆中的存活对象导致的空间碎片化问题就只能依靠更为负责的 内存分配器 和 内存访问器来解决。碧如通过 “分区空闲分配链表”来解决内存分配问题,内存的访问是用户程序最频繁的操作,假如在这个环节上增加额外的负担,肯定会字节影响用户程序的吞吐量
移动则内存回收时会更复杂,不移动则内存分配时会更复杂
停顿时间上对比:不移动存活对象停顿时间会更短,甚至不停顿,移动则需要停顿,存活对象越多停顿时间越长<br>
吞吐量上对比:移动对象更划算,移动存活对象,会使得收集器的效率会快一些,但是,因为内存分配和访问相比垃圾收集频率要高得多,这部分的耗时增加,总吐吞量是下降的。