垃圾收集算法
标记-清除算法
- 概念:首先标记出所有需要回收的对象,在标记完成后统一回收掉所有被标记的对象。
- 缺点:
- 效率问题:标记和清除过程的效率都不高
- 空间问题:标记清除后会产生不连续内存碎片,当有对象需要分配时可能会导致非必要垃圾收集。
复制算法
- 概念:将可用内存按容量分成大小相同两块,当其中一块内存用完了,就将存活着的对象复制到另一块上面,再清理已经用完的内存空间。
- 优点:无内存碎片,运行高效
- 缺点:将可用内存缩减为原内存一半
- 改进:在回收新生代时,设置一块Eden区和两块Survivor区,每次使用Eden和其中一块Survivor,回收时将存活的对象拷贝到另一块Survivor上,当Survivor区不够时,需要依赖其他内存(老年代)进行分配担保。Hotspot默认Eden:Survivor=8:1
标记-整理算法
标记整理算法与标记—>清除算法的不同在于增加一步整理的过程:标记—>整理—>清除
分代收集算法
- 概念:根据对象的存活周期的不同将内存划分为几块。
- 分代:一般分为年轻代,老年代,永久代,对不同的分区采用不同的垃圾回收算法,提高效率