是否回收需要通过GC Roots可达性分析判断是否根可达
一、复制算法
原理:
将指定的内存一分为二,每次只使用其中的一块内存,另一块内存作为预留,当内存垃圾回收的时候就把不需要回收的内存区域复制到另一块预留内存钟,并将原来使用的内存格式化,并且重新作为预留内存等待下一次垃圾回收的时候使用
优点
- 效率高
- 不会产生内存碎片
缺点
- 内存利用率低
- 需要移动指针
Appel 式回收
分配一块较大的 Eden 区和两块较小的 Survivor 空间(叫做 From 或者 To,也可以叫做 Survivor1 和
Survivor2)
在JVM中应用
JVM中新生代内存区域使用复制算法的apple式回收
二、标记清除算法
原理
1、标记,扫描所有对象标记出需要回收的对象
2、清除,扫描回收所有被标记的对象
优点
- 对象指针不需要移动
缺点
- 如果大量的对象需要被回收,扫描两次,效率低
- 产生大量不连续的内存碎片,可能导致大对象因为没有足够的连续内存而无法在该区域分配,从而提前触发垃圾回收
在JVM中应用
用于老年代的垃圾回收
三、标记整理算法
1、扫描所有对象标记出需要回收的对象
2、让所有存活的对象向一端移动
3、清理存活对象移动后的全部内存
优点
- 没有内存碎片
缺点
- 效率低
- 引用对象的地方都需要更新指针
在JVM中应用
用于老年代的垃圾回收