robot
最新文章(10)
Mqskit 和其它相關工具
CPython 的 GC 二、三事
寫 Mecurial Extension 是件快樂的事!
Mozilla 台灣辨公室徵人啟事
關於 Apple 的兩項專利
core dump 之前的 frame
怎麼發出 beep 聲?
先承認你要找的是奴才吧!
程式碼要清的多乾淨?
FreeBSD 的 Thread-Local Storage 實作
首頁
新編
最新留言
Entries RSS
重要關鍵字(10)
coding (122)
Python (93)
FreeBSD (71)
WEB (61)
URL (48)
hardware (46)
javascript (36)
Linux (34)
blog (30)
C++ (16)
所有關鍵字
新增 URL
CPython 的 GC 二、三事
by thinker
2 Columns
關鍵字:
Python
在看到 fcamel 的 linkname:[文章] http://bit.ly/unIBmD 之後,有幾點想要 補充一下。 Reference counting 是不是半自動化? 我並不覺的。 在程式語言的支援之下,如 $C++$ 的 smart pointer, reference counting 是能達到自動化的。 reference counting 只是一種技術,能不能自動化得看工具。 至 mark and sweep 也不能完全為 CPython 解決 cyclic reference 的問題。 主要原因在於 CPython 有一部分 code 是使用 reference counting,特別是 native module 的部分。 而 mark and sweep GC 並不知道這些使用 reference counting 的 object 之間的 reference。而這些 native object 也會使用 keep $Python$ object,反過來也是。 而這些跨 native 和 $Python$ 的 reference ,也可能構成 cyclic reference。 這是目前 CPython 的 mark and sweep GC 所不能發現的。 相同的問題也出現在 gecko 和 chrome 的 Javascript engine。 而 Java 也避免不了這個問題。 然而,如果是像 linkname:[Boehm] http://www.hpl.hp.com/personal/Hans_Boehm/gc/ 這種 mark and sweep GC, 則能解決這種問題。因為 Boehm 是不管三、七、二十一,把 heap 全掃一次。 對於 mark and sweep GC 不利於 $GUI$ 這種需要高度互動的程式,我也有一些補充。 以 CPython 為例,是用 incremental 的方式進行 scan。 另一方面,在 multi-thread 的環境下,也可以由獨立的 thread 進行 GC。 這些都能改善/解決這些互動性的問題。 最後,mark and sweep GC 的另一個問題。 對於那些需要不斷產生小 object,隨後在短時間內又丟棄的程式, 儘管任何一瞬間的記憶體使用量不大,但因為產生癈棄 object 的速度很快, 會在短時間內累積大量待回收的 object。 這對 mark and sweep GC 則是另一個考驗。
最後更新時間: 2011-12-04 00:38:38 CST |
引用
查詢:
COMMENTS: