垃圾回收算法

垃圾回收系統(tǒng),不僅需要收回釋放的對(duì)象,還要控制內(nèi)存碎片化。


標(biāo)記清掃:第一追蹤階段,第二清掃階段。深度優(yōu)先遍歷全部?jī)杀?,效率低下?/p>

? ? ? ? ? ? ? ? ? 效率解決方案:把清掃工作交個(gè)分配器,但是會(huì)造成內(nèi)存碎片。

? ? ? ? ? ? ? ? ? 內(nèi)存碎片解決方案:用一個(gè)數(shù)字來取模,讓回收延遲幾個(gè)周期。(因?yàn)榫植啃?,?? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 個(gè)周期后會(huì)成批死亡,雖然會(huì)內(nèi)存泄露)

標(biāo)記整理:標(biāo)記階段、整理階段。整體過程中,會(huì)多次遍歷堆。

? ? ? ? ? ? ? ? ? 解決方案:優(yōu)先使用標(biāo)記清楚,碎片率到達(dá)一定程度再整理。

標(biāo)記復(fù)制:只需對(duì)活著的對(duì)象遍歷復(fù)制一次。堆空間會(huì)下降一半,長(zhǎng)壽數(shù)據(jù)就比較麻煩。

? ? ? ? ? ? ? ? ? 解決方案:臨時(shí)變量推薦復(fù)制,全部變量建議整理算法。

引用計(jì)數(shù):將開銷分?jǐn)傇诔绦蜻\(yùn)行中。當(dāng)系統(tǒng)部分不可用時(shí),也可以回收部分內(nèi)存,分布式中 ? ? ? ? ? ? ? ? ? ? 十分有用。但是需要編譯器和運(yùn)行時(shí)系統(tǒng)支持,不然在指針操作非線程安全的情況 ? ? ? ? ? ? ? ? ? ? 下有問題。引用計(jì)數(shù)頻繁操作、原子性。

? ? ? ? ? ? ? ? ? 解決方案:延遲、合并引用計(jì)數(shù),在開始、結(jié)束時(shí)保持?jǐn)?shù)據(jù)一致性。

? ? ? ? ? ? ? ? ? 無法解決環(huán)狀問題。

? ? ? ? ? ? ? ? ? 解決方案:偶爾追蹤回收,或者實(shí)驗(yàn)刪除法。

? ? ? ? ? ? ? ? ? 引用計(jì)數(shù)位數(shù)問題。

? ? ? ? ? ? ? ? ? 解決方案:偶爾追蹤修正引用計(jì)數(shù)值。

非移動(dòng)算法:標(biāo)記清掃、引用計(jì)數(shù)。Bool、int

? ? ? ? ? ? ? ? ? 長(zhǎng)期運(yùn)行會(huì)使堆碎片化。

移動(dòng)算法:標(biāo)記整理、標(biāo)記復(fù)制

? ? ? ? ? ? ? ? ? 開銷大,不常使用,建議碎片率達(dá)到一定程度才建議使用。

分代回收:把對(duì)象分代進(jìn)行處理,類似分段函數(shù)??梢杂行У慕Y(jié)合他們的優(yōu)點(diǎn)、避免缺點(diǎn)。分 ? ? ? ? ? ? ? ? ? ?段函數(shù)的系數(shù)可以PID來動(dòng)態(tài)調(diào)整。

? ? ? ? ? ? ? ? ?同一代中可以進(jìn)行分桶,桶滿了才給升代。升代只需要移動(dòng)指針就可以了。

? ? ? ? ? ? ? ? ?超引用計(jì)數(shù):引用計(jì)數(shù)管理年老代,復(fù)制回收管理年輕代。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容