JVM虛擬機垃圾回收算法

1.標記-清除算法:

    (1)原理:首先標記出所有需要回收的對象,在標記完成後統一回收所有被標記的對象

    (2)算法示意圖:


    (3)缺點:標記和清除這倆個效率不高,標記清除後會產生大量不連續的內存碎片,在對象分配很大內容的時候,

    就找不到足夠的連續內容,使的提前出發一次垃圾回收

2.複製算法:

    (1)原理:將內存按容量分爲大小相同的倆塊,每次只使用其中的一塊,當內存使用完後,將所有存活的對象複製

    到另一塊內存,然後將已使用的內容一次性清除

    (2)算法示意圖:

    

    (3)缺點:將內存縮小爲原來的一半(如果不需要浪費還需要額外的空間進行擔保),對象存活率較高時需要進行較多

    的複製

    (4)使用場景:這種算法一般用於新生代對象的回收,一般將內存分爲一塊較大的Eden和倆塊較小的Survivor,每次使用

    Eden和一塊Survivor,在內存回收時將這倆塊存活的對象複製到另一塊Survivor上,清理掉所有用過的內存,HotSpot

    虛擬機的Eden和Survivor的分配比例爲8:1,所以新生代佔用的內存爲90%,我們無法保證每次回收完存活的對象都是

    10%,當Survivor不夠用時,只能依賴其它內存(這裏指老年代)進行分配

3.標記-整理算法:

    (1)先對需要回收的對象進行標記,讓所有存活的對象向一端移,然後直接清理掉邊界以外的內存

    (2)算法示意圖:

    

    (3)使用場景:適合老年代垃圾回收

4.分代收集算法:

    (1)原理:將堆分爲新生代和老年代,根據所分的代採用不同的收集算法

    (2)新生代特點:每次收集都會有大批的對象死去,只有少量的存活,所以適合採用複製算法

    (3)老年代特點:對象存活率高,沒有額外的空間爲其擔保,標記-整理算法

    

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章