常見的垃圾回收算法有:算法
標記-清除算法、複製算法、標記-整理算法、分代收集算法工具
標記—清除算法包括兩個階段:「標記」和「清除」。 標記階段:肯定全部要回收的對象,並作標記。 清除階段:將標記階段肯定不可用的對象清除。對象
缺點:生命週期
標記和清除的效率都不高。
會產生大量的碎片,而致使頻繁的回收。內存
內存分紅大小相等的兩塊,每次使用其中一塊,當垃圾回收的時候, 把存活的對象複製到另外一塊上,而後把這塊內存整個清理掉。get
缺點:博客
須要浪費額外的內存做爲複製區。
當存活率較高時,複製算法效率會降低。it
標記—整理算法不是把存活對象複製到另外一塊內存,而是把存活對象往內存的一端移動,而後直接回收邊界之外的內存。io
缺點: 算法複雜度大,執行步驟較多效率
目前大部分 JVM 的垃圾收集器採用的算法。根據對象存活的生命週期將內存劃分爲若干個不一樣的區域。通常狀況下將堆區劃分爲新生代( Young Generation 和老年代( Tenured Generation ),永久代( Permanet Generation )。
老年代的特色是每次垃圾收集時只有少許對象須要被回收,而新生代的特色是每次垃圾回收時都有大量的對象須要被回收,那麼就能夠根據不一樣代的特色採起最適合的收集算法。
Young:存放新建立的對象,對象生命週期很是短,幾乎用完能夠當即回收,也叫 Eden 區。
Tenured: young 區屢次回收後存活下來的對象將被移到 tenured 區,也叫 old 區。
Perm:永久帶,主要存加載的類信息,生命週期長,幾乎不會被回收。
缺點: 算法複雜度大,執行步驟較多。
本文由博客羣發一文多發等運營工具平臺 OpenWrite 發佈