垃圾收集算法
标记-复制算法(Copying): 将可用内存按容量划分为两个区域,每次只使用其中的一块。当这一块的内存用完了,就将还存活着的对象复制到另外一块上面, 然后再把已使用过的内存空间一次清理掉。
标记-清除算法(Mark-Sweep): 算法分为“标记” 和“清除”两个阶段:首先标记出所有需要回收的对象,在标记完成后统一回收掉所有被标记 的对象。
标记-整理算法: 标记阶段和标记清除算法一样,也是先标记出所需要回收的对象,然后让所有存活的对象移动到另一端,然后直接清理掉边界以外的内存。
分代收集算法(Generational Collection): 把Java堆分为新生代和老年代, 这样就可以根据各个年代的特点采用最适当的收集算法
Young区:复制算法(对象在被分配之后,可能生命周期比较短,Young区复制效率比较高)
Old区:标记清除或标记整理(Old区对象存活时间比较长,复制来复制去没必要,不如做个标记再清理)
标记清除:缺点
会产生大量不连续的内存碎片,造成内存浪费,空间碎片太多可能会导致以后在程序运行过程中需要分配较大对象时,无法找到足够的连续内存而不得不提前触发另一次垃圾收集动作。
优点:速度块,不需要移动和复制对象
复制算法:缺点
浪费一半的内存空间
复制对象会造成性能和时间上的消耗<