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