垃圾收集算法

垃圾收集算法

标记-清除算法

  1. 概念:首先标记出所有需要回收的对象,在标记完成后统一回收掉所有被标记的对象。
  2. 缺点:
    • 效率问题:标记和清除过程的效率都不高
    • 空间问题:标记清除后会产生不连续内存碎片,当有对象需要分配时可能会导致非必要垃圾收集。

复制算法

  1. 概念:将可用内存按容量分成大小相同两块,当其中一块内存用完了,就将存活着的对象复制到另一块上面,再清理已经用完的内存空间。
  2. 优点:无内存碎片,运行高效
  3. 缺点:将可用内存缩减为原内存一半
  4. 改进:在回收新生代时,设置一块Eden区和两块Survivor区,每次使用Eden和其中一块Survivor,回收时将存活的对象拷贝到另一块Survivor上,当Survivor区不够时,需要依赖其他内存(老年代)进行分配担保。Hotspot默认Eden:Survivor=8:1

标记-整理算法

​ 标记整理算法与标记—>清除算法的不同在于增加一步整理的过程:标记—>整理—>清除

分代收集算法

  1. 概念:根据对象的存活周期的不同将内存划分为几块。
  2. 分代:一般分为年轻代,老年代,永久代,对不同的分区采用不同的垃圾回收算法,提高效率