常見的垃圾回收演算法有:
標記-清除演算法、復制演算法、標記-整理演算法、分代收集演算法
標記-清除演算法
標記—清除演算法包括兩個階段:“標記”和“清除”, 標記階段:確定所有要回收的物件,并做標記, 清除階段:將標記階段確定不可用的物件清除,
缺點:
標記和清除的效率都不高,
會產生大量的碎片,而導致頻繁的回收,
復制演算法
記憶體分成大小相等的兩塊,每次使用其中一塊,當垃圾回收的時候, 把存活的物件復制到另一塊上,然后把這塊記憶體整個清理掉,
缺點:
需要浪費額外的記憶體作為復制區,
當存活率較高時,復制演算法效率會下降,
標記-整理演算法
標記—整理演算法不是把存活物件復制到另一塊記憶體,而是把存活物件往記憶體的一端移動,然后直接回收邊界以外的記憶體,
缺點: 演算法復雜度大,執行步驟較多
分代收集演算法
目前大部分 JVM 的垃圾收集器采用的演算法,根據物件存活的生命周期將記憶體劃分為若干個不同的區域,一般情況下將堆區劃分為新生代( Young Generation 和老年代( Tenured Generation ),永久代( Permanet Generation ),
老年代的特點是每次垃圾收集時只有少量物件需要被回收,而新生代的特點是每次垃圾回收時都有大量的物件需要被回收,那么就可以根據不同代的特點采取最適合的收集演算法,
Young:存放新創建的物件,物件生命周期非常短,幾乎用完可以立即回收,也叫 Eden 區,
Tenured: young 區多次回收后存活下來的物件將被移到 tenured 區,也叫 old 區,
Perm:永久帶,主要存加載的類資訊,生命周期長,幾乎不會被回收,
缺點: 演算法復雜度大,執行步驟較多,
本文由博客群發一文多發等運營工具平臺 OpenWrite 發布
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/261995.html
標籤:其他
上一篇:tomcat
