垃圾回收算法有哪些?

     在學習面向對象時大家肯定知道GC,我們都知道無用的變量就是垃圾,那麼該何時回收,怎麼回收呢,我們今天來看一下。

標記清除

  • 標記-清除算法將垃圾回收分爲兩個階段:標記階段和清除階段。

  • 在標記階段首先通過根節點(GC Roots),標記所有從根節點開始的對象,未被標記的對象就是未被引用的垃圾對象。

  • 在清除階段,清除所有未被標記的對象。

複製算法

從根集合節點進行掃描,標記出所有的存活對象,並將這些存活的對象複製到一塊兒新的內存(圖中下邊的那一塊兒內存)上去,之後將原來的那一塊兒內存(圖中上邊的那一塊兒內存)全部回收掉

標記整理

     複製算法的高效性是建立在存活對象少、垃圾對象多的前提下的。
     這種情況在新生代經常發生,但是在老年代更常見的情況是大部分對象都是存活對象。如果依然使用複製算法,由於存活的對象較多,複製的成本也將很高。

分代收集算法

     分代收集算法就是目前虛擬機使用的回收算法,它解決了標記整理不適用於老年代的問題,將內存分爲各個年代。一般情況下將堆區劃分爲老年代(Tenured Generation)和新生代(Young Generation),在堆區之外還有一個代就是永久代(Permanet Generation)。

     在不同年代使用不同的算法,從而使用最合適的算法,新生代存活率低,可以使用複製算法。而老年代對象存活率搞,沒有額外空間對它進行分配擔保,所以只能使用標記清除或者標記整理算法。

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