電子書下載連接ios
一圖總結文章內容git
標記清除法是一種找到垃圾的方法,就是分紅兩個步驟,標記和清除,標記是從根部除法作搜索,通過的則標記,清除是從堆遍歷 找到沒有使用則清除。
github
標記使用什麼搜索方式呢?廣度搜索、深度搜索,這個過程是要中斷對象操做的,不中斷的話,新生成的對象 就可能不可達。算法
在清除階段,咱們使用變量 sweeping 遍歷堆,具體來講就是從堆首地址 $heap_start 開始,按順序一個個遍歷對象的標誌位。學習
這裏的分配是指將回收的垃圾進行再利用。遍歷 $free_list,尋找合適的 size 的分塊就是分配階段。
First -fit、Best -fit、Worst -fit 的不一樣:
視頻
前文中已經提過,根據分配策略的不一樣可能會產生大量的小分塊。但若是它們是連續的, 咱們就能把全部的小分塊連在一塊兒造成一個大分塊。這種「鏈接連續分塊」的操做就叫做合 並(coalescing),合併是在清除階段進行的。對象
利用分塊大小不一樣的空閒鏈表,即建立只鏈接大分塊的空 閒鏈表和只鏈接小分塊的空閒鏈表。進程
將大小相近的對象整理成固定大小的塊進行管理的作法內存
我的對這裏有新理解: 全部的對象,一旦對象不在根部有引用,那麼這個對象就不可能再被引用,標記後,沒有被標記的對象必定是非活動對象了,可是新產生的對象再後續的發展中 可能成爲非活動對象也可能成爲非活動對象,那麼這些新對象都標記不能被清除,所以沒有標記的對象是能夠延遲清除的,不會再次被標記。可是要注意新對象都要標記。ci
我的簡介:高級開發工程師,興趣和領域(Unity、Unreal、cocos creator、安卓終端開發、ios終端開發、音視頻開發、圖形學),歡迎加W:wlxklyh 探討問題。(歡迎star:https://github.com/wlxklyh/SoftRenderer)