垃圾收集算法
標記-復制算法(Copying): 將可用內存按容量劃分為兩個區域,每次只使用其中的一塊。當這一塊的內存用完了,就將還存活著的對象復制到另外一塊上面, 然后再把已使用過的內存空間一次清理掉。
標記-清除算法(Mark-Sweep): 算法分為“標記” 和“清除”兩個階段:首先標記出所有需要回收的對象,在標記完成后統一回收掉所有被標記 的對象。
標記-整理算法: 標記階段和標記清除算法一樣,也是先標記出所需要回收的對象,然后讓所有存活的對象移動到另一端,然后直接清理掉邊界以外的內存。
分代收集算法(Generational Collection): 把Java堆分為新生代和老年代, 這樣就可以根據各個年代的特點采用最適當的收集算法
Young區:復制算法(對象在被分配之后,可能生命周期比較短,Young區復制效率比較高)
Old區:標記清除或標記整理(Old區對象存活時間比較長,復制來復制去沒必要,不如做個標記再清理)
標記清除:缺點
會產生大量不連續的內存碎片,造成內存浪費,空間碎片太多可能會導致以后在程序運行過程中需要分配較大對象時,無法找到足夠的連續內存而不得不提前觸發另一次垃圾收集動作。
優點:速度塊,不需要移動和復制對象
復制算法:缺點
浪費一半的內存空間
復制對象會造成性能和時間上的消耗<