垃圾回收算法有幾種類型? 他們對應的優缺點又是什麼?

常見的垃圾回收算法有:算法

標記-清除算法、複製算法、標記-整理算法、分代收集算法工具

標記-清除算法

標記—清除算法包括兩個階段:「標記」和「清除」。 標記階段:肯定全部要回收的對象,並作標記。 清除階段:將標記階段肯定不可用的對象清除。對象

缺點:生命週期

標記和清除的效率都不高。
會產生大量的碎片,而致使頻繁的回收。內存

複製算法

內存分紅大小相等的兩塊,每次使用其中一塊,當垃圾回收的時候, 把存活的對象複製到另外一塊上,而後把這塊內存整個清理掉。get

缺點:博客

須要浪費額外的內存做爲複製區。
當存活率較高時,複製算法效率會降低。it

標記-整理算法

標記—整理算法不是把存活對象複製到另外一塊內存,而是把存活對象往內存的一端移動,而後直接回收邊界之外的內存。io

缺點: 算法複雜度大,執行步驟較多效率

分代收集算法

目前大部分 JVM 的垃圾收集器採用的算法。根據對象存活的生命週期將內存劃分爲若干個不一樣的區域。通常狀況下將堆區劃分爲新生代( Young Generation 和老年代( Tenured Generation ),永久代( Permanet Generation )。

老年代的特色是每次垃圾收集時只有少許對象須要被回收,而新生代的特色是每次垃圾回收時都有大量的對象須要被回收,那麼就能夠根據不一樣代的特色採起最適合的收集算法。

Young:存放新建立的對象,對象生命週期很是短,幾乎用完能夠當即回收,也叫 Eden 區。

Tenured: young 區屢次回收後存活下來的對象將被移到 tenured 區,也叫 old 區。

Perm:永久帶,主要存加載的類信息,生命週期長,幾乎不會被回收。

缺點: 算法複雜度大,執行步驟較多。

本文由博客羣發一文多發等運營工具平臺 OpenWrite 發佈

相關文章
相關標籤/搜索