- 标记清除算法:对内存中的对象进行一次扫描,然后把仍然存活着的对象进行标记,第二次扫描时会清除那些没有被标记的对象。
- 缺点:产生内存碎片
- 标记整理算法:相较于标记清除后再增加的一次扫描,这一次扫描会把活着的对象直接放到一起
- 优点:防止内存碎片的产生
- 缺点:整理的时间成本高
- 复制算法:假设现在有内存1和内存2,当内存1占满的时候,扫描仍然活着的对象放入内存2,然后清空内存1。当内存2占满的时候采用同样的方法将活着的对象放入内存1,以此类推。
- 优点:防止内存碎片产生
- 缺点:占用一定额外内存
- 分代回收算法:这个是上面三种的联合使用,也是Java堆中采用的算法。
过程:
(1)新产生的对象放入伊甸园区,伊甸园区放不下后,进行Minor GC,将伊甸园区和from区中仍然存活的对象放入to区,下一次就将伊甸园区和to区中的对象放入from区。
(2) 对象每次在Minor GC中存活就设置年龄+1,当年龄达到15后,就会被放入老年代,老年代采用标记整理算法。