1. 程式人生 > >垃圾回收GC3種算法的衍生品

垃圾回收GC3種算法的衍生品

依然 響應 區域 bubuko 來看 技術分享 做出 生成 ati

小結:

1、GC和程序處理的本質是無關的;

2、增量回收:預測和控制GC所產生的中斷時間;

1、

分代回收

GC和程序處理的本質是無關的,因此它所消耗的時間越短越好。分代回收的目的,正是為了在程序

運行期間,將GC所消耗的時間盡量縮短。

基本思路

利用了一般性程序所具備的性質,即大部分對象都會在短時間內成為垃圾,而經過一定時間依然存活的

對象往往擁有較長的壽命。如果壽命長的對象更容易存活下來,壽命短的對象則會被很快廢棄,那麽到底

怎樣做才能讓GC變得更加高效呢?

如果對分配不久,誕生時間較短的“年輕”對象進行重點掃描,應該就可以更有效地回收大部分垃圾。

在分代回收中,對象按照生成時間進行分代,剛剛生成不久的年輕對象化為新生代(young generation)

,而存活了較長時間的對象化為老生代(old generation)。根據具體實現方式的不通,可能還會劃分更多的代。

只掃描新生代對象的回收操作,被稱為小回收(minor GC)。

隨著程序的運行,老生代區域中的“死亡”對象也在不斷增加。為了避免這些死亡的老生代對象白白占用內存空間,

偶爾需要對包括老生代區域在內的全部區域進行一次掃描回收。像這樣以全部區域為對象的GC操作被稱為

完全回收(full GC)或者大回收(major GC)。

技術分享圖片

分代回收通過減少GC中掃描的對象數量,達到縮短GC帶來的平均中斷時間的效果。

不過由於還是需要進行大回收,因此最大中斷時間並沒有得到什麽改善。

從吞吐量來看,在對象壽命假說能夠成立的程序中,由於掃描對象數量的減少,可以達到非常不錯的成績。

但是,其性能會被程序行為、分代數量、大回收觸發條件等因素大幅度左右。

2、

增量回收

在機器人的姿勢控制程序中,如果因為GC而讓控制程序中斷了0.1秒,機器人可能摔倒。

或者,如果車輛制動控制程序因為GC而延遲響應的話,後果也是不堪設想的。

在這些對實時性要求很高的程序中,必須能夠對GC所產生的中斷時間做出預測。例如,可以將

“最多只能中斷0.01秒”作為附加條件。

在一般的GC算法中,作出這樣的保證是不可能的,因為GC產生的中斷時間與對象的數量和狀態有關。

因此,為了維持程序的實時性,不等到GC玩不完成,而是將GC操作細分成多個部分逐一執行:增量回收 incremental GC

3、

並行回收

垃圾回收GC3種算法的衍生品