Hotspot GC實現原理

2022-08-11 05:51:16 字數 878 閱讀 9960

可達性分析的gc roots主要是全域性性引用或在

stack frame

中 ,現在的應用僅僅方法區往往就有幾百兆,這樣要這個檢查這裡面的引用,就必然會消耗很多時間,效率很低。

分析工作在乙個保證一致性的快照中進行。在整個分析期間,要確保整個執行系統被凍結,如果分析過程中物件引用還有不斷變化,就會影響分析結果,準確性便無法保證。這是gc工作時必須停止當前所有執行緒的乙個重要原因。

當系統停下來後,並不會乙個不漏的檢查所有全域性區,而是通過使用一種稱為 oopmap的資料結構來獲取物件引用的位置資訊。

類載入完成後,hotspot就會把物件內什麼偏移量上什麼型別的資料計算出來,在編譯過程中,也會在特點位置記錄下棧和暫存器中那些位置是引用。這樣

gc掃瞄時就知道那些是引用了。

在oopmap的協助下,

hotspot

可以快速準確的列舉

gc roots

。記錄了引用資訊的地方叫做safepoint(安全點),在程式執行時,並不是所有的地方都能停頓下來開始

gc,只有到達安全點才可以。

1)安全點不能少(gc等待時間太長),也不能太多(

gc頻繁啟動)。所以安全點選定的標準就是,是否具有讓程式長時間執行的特徵。

2)還需要考慮,如何在gc發生時讓所有執行緒都跑到最近的安全點上再停下了。

對於處於sleep和

blacked

狀態的執行緒,無法響應

jvm發出的請求,走到安全點去中斷掛起。這就需要

safe region

安全區。

safe region

時會檢查系統是否已經完成了

gc,如果沒有完成,就等待直到收到可以安全離開

safe region

的訊號為止。

kvo實現原理 KVC KVO實現原理

一 kvc運用了乙個isa swizzling技術。isa swizzling就是型別混合指標機制。kvc主要通過isa swizzling,來實現其內部查詢定位的。isa指標,如其名稱所指,就是is a kind of的意思 指向維護分發表的物件的類。該分發表實際上包含了指向實現類中的方法的指標,...

實現原理 Vuex的實現原理

你知道vuex如何工作的嗎?先來看下圖了解下 了解圖之後看來下 的實現原理吧 let vue class store this.mutations this.actions this.vm new vue const options if getters if mutations if action...

afn原理 ios iOS AFN實現原理

nsurlsessiondatatask datataskwithrequest nsurlrequest request completionhandler void nsurlresponse response,id responseobject,nserror error completion...