.NET垃圾收集器的過去、現在和未來(一)

          Patrick Dussud介紹:
          Patrick Dussud在微軟工作了11年,曾經負責VBA、Jscript、MS Java等語言運行時的垃圾收集器(Garbage Collector)的設計,目前負責.NET CLR垃圾收集器的設計。他是.NET CLR的架構師,WinFX的首席架構師,Windows架構師組的成員。
          在微軟之前,Patrick是德州儀器(TI)Explorer工作站系統的主要設計人,Lucid公司Energize產品的首席架構師。

          關鍵內容摘要

          1. 微管理 / 內存的顯式管理 ---  手動內存管理(new/delete)
                  你必須保證在釋放之前內存沒有被別人使用,如果你把內存給了別人,往往你就不確定應該何時釋放內存了。當你釋放了內存,不知道別人正在使用這塊內存時,就產生了程序崩潰的問題。所以,當你顯式進行“new”和“delete”時,內存管理是一個復雜的問題,并且,此時你的代碼不可組合。要么你必須確定對自己的內存有完全的控制,因此,要達到這種完全隔離的目的,你必須在將內存傳遞給別的模塊時進行完全拷貝,這樣,別的模塊就只對這個完全拷貝的內存負責。要么你就得在某個地方形成對整個內存池的統一的管理,這就是自動化內存管理,這就是垃圾收集器的工作。

          2. 對象終止器的調用時機由垃圾收集器決定,這些對象的析構函數被調用的先后順序是無法預先確定的。提出了“關鍵終止化對象”的概念。當有一系列對象需要終止化時,關鍵終止化對象最后被終止化,直到上層對象干完工作前。

          3.  工作機理: 垃圾收集器首先遍歷所有的棧和靜態變量,然后返回最初的樹集。然后遍歷樹集對程序能夠到達的每一個對象作標記。此時,我們就能逐個對象地檢查內存,發現它被標記了,好的,留下。沒有被標記?喔,我們有一個垃圾了。

          4.  垃圾收集器的絕大部分速度和效率都來源于對回收策略的調整。通過保持內存緊湊,形成緩存本地化,頁面本地化等等優勢,很可能其效率甚至高于傳統“new”和“delete” 操作,尤其是對于非常難以管理的服務器內存來說更是如此。


          只有注冊用戶登錄后才能發表評論。


          網站導航:
           
          主站蜘蛛池模板: 葵青区| 仪征市| 神池县| 青川县| 宜春市| 浮山县| 阳春市| 都兰县| 勃利县| 长垣县| 南华县| 彰化市| 高淳县| 余江县| 新野县| 威远县| 韶关市| 三亚市| 阿拉尔市| 墨竹工卡县| 宜都市| 含山县| 阳高县| 吉林省| 德令哈市| 韶山市| 密山市| 凤冈县| 宜春市| 和田县| 林甸县| 盐边县| 方正县| 县级市| 清河县| 利辛县| 邹城市| 灵川县| 临夏县| 吴堡县| 屯门区|