1. 程式人生 > >第16課:瞬間理解三種基本的GC演算法基石

第16課:瞬間理解三種基本的GC演算法基石

內容:

    1.GC的標記、清除演算法     2.GC的複製演算法     3.GC的標記、整理演算法

一、GC的標記、清除演算法

    記憶體中的物件構成一棵樹,當有效的記憶體被耗盡的時候,程式就會停止,此時做兩件事:         a)標記,標記從樹根可達的物件(途中水紅色)         b)清除(清除不可達的物件)     標記清除的時候需要停止程式執行,如果不停止,此時如果存在新產生的物件,這個物件是樹根可達的,但是沒有被標記(標記已經完成了),會清除掉。     缺點:遞迴效率低效能低;釋放空間不連續容易導致記憶體碎片;會停止整個程式執行

二、GC的複製演算法

    把記憶體分成兩塊區域:空閒區域和活動區域,第一還是標記(標記可達的物件),標記之後把可達的物件複製到空閒區,將空閒區變成活動區,同時把以前活動區物件清除掉,變成空閒區。     優缺點:速度快但耗費空間,假定活動區域全部是活動物件,這個時候進行交換的時候就相當於多佔用了一倍空間。

三、GC的標記、整理演算法

     採用標記的方法,同時整理出有效的物件組成一段連續的區域。是基於一和二演算法的平衡。     標記活躍物件;整理,會把記憶體物件整理成一課樹一個連續的空間。     標記-清除演算法會使記憶體產生碎片,那麼如何解決這個問題,很顯然,清除以後再整理一下記憶體不就行了。     標記-整理(Mark-Compact)演算法不直接對可回收物件進行清理,而是讓所有可用的物件都向一端移動。然後直接清理掉邊界以外的記憶體。