.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” 操作,尤其是對于非常難以管理的服務器內存來說更是如此。


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


          網站導航:
           
          主站蜘蛛池模板: 胶州市| 吉木乃县| 迭部县| 衢州市| 韩城市| 安福县| 水城县| 海淀区| 新化县| 临潭县| 佛教| 崇仁县| 阳江市| 广宁县| 惠来县| 钟山县| 平邑县| 方城县| 芜湖县| 介休市| 瓮安县| 南漳县| 利辛县| 阳城县| 峨眉山市| 雷波县| 临汾市| 广汉市| 建瓯市| 长白| 茂名市| 临西县| 孝昌县| 克拉玛依市| 洱源县| 永年县| 长泰县| 米林县| 天峻县| 海城市| 东乌珠穆沁旗|