1.停止-复制?
停止-复制:首先我们将程序停止,重新分配一个新的内存空间去存储活的对象。分配之后,是所在内存地址空间有序的,然后把以前使用过的地址空间清除.在垃圾并不是非常多的时候,我们是感受不到那种间隙的。
图解:回收之后是有序的.
缺点:有点点浪费内存空间,如果对象存活率较高时要执行较多的复制操作,效率降低
2.标记-清除?
标记-清除:先标记出要回收的对象。然后清除
图解:
缺点:存在许多内存碎片,需要整理。
3.标记-处理?
标记-清除:先标记出要回收的对象。让后清除,不过处理并不是直接的进行整理,而是存活的对象往前移动直到前移一段,直到前面所在的内存地址不为空
图解:
相对于第一种和第二种的结合体。没有内存碎片,内存地址连续