标记清除
- 先判断可以回收的对象,并标记
- 再对标记的对象,进行回收,释放空间。
- -------(释放空间只需要将对象所占用内存的起始和结束地址记录下来,放到空闲地址列表里就可以了)
- -------(再分配新对象的时候,在空闲地址列表里找一块足够的空间)
- 优点:速度快
- 缺点:产生内存碎片
标记整理
- 先判断可以回收的对象,并标记
- 一边释放空间,一边将未回收的对象内存空间,向前移动,让内存更加紧凑
- 优点:没有内存碎片
- 缺点:效率低,需要移动的时间。并且在整理过后,如果一些局部变量引用了改变地址的变量,需要改变引用的引用地址。
复制
- 先标记,找到不被引用的对象,标记为垃圾
- 将未被回收的对象,从FROM区域复制到TO区域。然后交换FROM和TO的位置。TO总是空闲区域
- 特点:把内存区划为两个相同大小的区域
- 优点:不会产生内存碎片
- 缺点:会占用双倍的内存空间