書名: JVM G1源碼分析和調(diào)優(yōu)作者名: 彭成寒本章字?jǐn)?shù): 304字更新時間: 2019-04-22 18:14:50
1.3.3 標(biāo)記清除
從根集合出發(fā),遍歷對象,把活躍對象入棧,并依次處理。處理方式可以是廣度優(yōu)先搜索也可以是深度優(yōu)先搜索(通常使用深度優(yōu)先搜索,節(jié)約內(nèi)存)。標(biāo)記出活躍對象之后,就可以把不活躍對象清除。下面演示一個簡單的例子,從根集合出發(fā)查找堆空間的活躍對象,如圖1-3所示。

圖1-3 標(biāo)記清除算法
這里僅僅演示了如何找到對象,沒有進(jìn)一步介紹找到對象后如何處理。對于標(biāo)記清除算法其實還需要額外的數(shù)據(jù)結(jié)構(gòu)(比如一個鏈表)來記錄可用空間,在對象分配的時候從這個鏈表中尋找能夠容納對象的空間。當(dāng)然這里還有很多細(xì)節(jié)都未涉及,比如在分配時如何找到最合適的內(nèi)存空間,有First Fit、Best Fit和Worst Fit等方法,這里不再贅述。標(biāo)記清除算法最大的缺點就是使內(nèi)存碎片化。
推薦閱讀
- Vue.js 3.x快速入門
- iOS Game Programming Cookbook
- Boost C++ Application Development Cookbook(Second Edition)
- 數(shù)據(jù)庫系統(tǒng)原理及MySQL應(yīng)用教程
- Practical DevOps
- Python神經(jīng)網(wǎng)絡(luò)項目實戰(zhàn)
- OpenShift在企業(yè)中的實踐:PaaS DevOps微服務(wù)(第2版)
- Java EE 7 Performance Tuning and Optimization
- Mastering JavaScript High Performance
- 運用后端技術(shù)處理業(yè)務(wù)邏輯(藍(lán)橋杯軟件大賽培訓(xùn)教材-Java方向)
- 基于SpringBoot實現(xiàn):Java分布式中間件開發(fā)入門與實戰(zhàn)
- UI設(shè)計全書(全彩)
- Android嵌入式系統(tǒng)程序開發(fā):基于Cortex-A8(第2版)
- Web前端開發(fā)技術(shù):HTML、CSS、JavaScript
- Java高手是怎樣煉成的:原理、方法與實踐