分代垃圾回收
? ? ? ? 分代收集法是目前大部分 JVM 所采用的方法,其核心思想是根據對象存活的不同生命周期將內存劃分為不同的域,一般情況下將 GC 堆劃分為老生代(Tenured/Old Generation)和新生代(Young Generation)。老生代的特點是每次垃圾回收時只有少量對象需要被回收,新生代的特點是每次垃圾回收時都有大量垃圾需要被回收,因此可以根據不同區域選擇不同的算法。
新生代(標記-復制算法)
? ? ? ? 每次垃圾收集都能發現新生代存活對象特別少,只有少量存活,死去對象特別多,因此選用“標記-復制算法”,只需付出少量存活對象的復制成本就可以完成收集。
老年代(標記-整理算法)
? ? ? ?老年代活著的對象特別多,適用于“標記-整理”或“標記-清除”算法。
? ? ? ? 因為對象存活率高,沒有額外空間對它進行分配擔保,就必須采用“標記-整理”或“標記-清除”算法來進行回收,不必進行內存復制,且直接騰出空閑內存。