到昨天為止,yfgc中的核心代碼,我覺得是看完了。從gc_malloc中,了解到分配出來的內(nèi)存如何進(jìn)行管理;從gc_link中,了解到如何在兩塊內(nèi)存之間建立引用依賴關(guān)系;從gc_enter和gc_leave中,了解到通過gc_malloc分配出來的自由內(nèi)存是如何在調(diào)用堆棧上記錄的;從gc_collect中,整合了以上所有的內(nèi)容,了解到整個(gè)依賴樹是如何建立固定部分和自動(dòng)部分,以及如何標(biāo)記出垃圾和非垃圾內(nèi)存的區(qū)別并進(jìn)行回收的。不過,在gc_collect的實(shí)現(xiàn)中,還是有些WEAK_CONTAINER的內(nèi)容無法理解,因此今晚就來看看weak table吧。weak table我譯為弱表,什么是弱表呢?弱表可以看作一個(gè)容器,容器內(nèi)的元素為其他內(nèi)存的指針,也就是容器和其他內(nèi)存之間建立了引用依賴關(guān)系。只是這種引用是弱引用,其依賴關(guān)系通常會(huì)在gc_collect的時(shí)候被系統(tǒng)自動(dòng)解除,以便于將容器中所指向的內(nèi)存進(jìn)行回收(如果這些內(nèi)存沒有在其他地方被強(qiáng)引用的話)。因此弱表引用的內(nèi)存通常不能直接持有,因?yàn)槠渖谑菦]有保證的,只能通過弱表進(jìn)行查找訪問。我的解釋可能不太準(zhǔn)確,有興趣的同學(xué)自己google一下吧。解釋了概念,接下來看看代碼