人人做人人澡人人爽欧美,国产主播一区二区,久久久精品五月天,羞羞视频在线观看免费

當前位置:蘿卜系統下載站 > 技術開發教程 > 詳細頁面

【轉載】對于垃圾回收機制

【轉載】對于垃圾回收機制

更新時間:2022-06-28 文章作者:未知 信息來源:網絡 閱讀次數:

轉載自【雨聲論壇】
原作:software_young

----------------------轉載開始------------------------
所謂垃圾回收機制,指的是內存和各種變量或者目標所使用內存的釋放和回收機制。

軟件的發展歷史,就是軟件不斷龐大、人力逐漸難以控制和對開發人員的技術要求逐漸降低的歷史。

早先的許多軟件,都是用匯編語言寫的,匯編是機器碼的助記符方式,因此,用匯編編程,實際就是用機器碼編程。它要求程序員對機器非常熟悉才行,否則很難編出能用的程序。

那時候的程序員首先要是鐵算盤,需要對機器的運行狀態完全成竹在胸,腦子里對CPU的各個寄存器的值,狀態寄存器的狀態,棧內的BP、SP,內存的分配和釋放以及其他一些東西非常清楚才行。他掌握了機器(哪怕只是虛擬機)的全部資源的使用和釋放,因此那時候,沒有所謂的垃圾回收機制。程序員可以說就是高級機器人,他管理一切。

隨著軟件技術的發展,高級語言開始出現,軟件也逐漸變得龐大起來,主要的高級語言都有了專門用于分配和釋放內存和變量、目標(對于面向目標的編程語言來說)的函數或者功能。

程序員用它們來負責內存的分配和釋放。但是逐漸地,高級機器人也感到難以應付了,于是出現了內存丟失的問題,就是內存分配后忘記釋放了。

一般來說,操作系統記錄了進程所使用的資源,在進程結束時釋放這些資源。但是如果進程運行的時間很長,或者永不結束(主機和小型機經常是常年運行的),操作系統就沒有機會來及時地釋放這些資源,從而造成系統內存的丟失。系統內存的丟失積累到一定的程度,怪事就該出現了。

這個問題實際是人腦和電腦復雜度的比較問題。不幸的是,人腦注定要輸給電腦(在某些方面)。這就要求系統提供一種機制來統一管理和回收垃圾。

不同語言和系統的垃圾回收機制是不同的。

C語言實際沒有垃圾回收機制,一切依賴程序員和操作系統。如果編寫的程序忘記釋放內存而又長時間的運行,麻煩就來了。而如果編譯器本身的庫函數有問題,那就更可怕了。Borland的C/C++編譯器經常有這個問題,業界很多人都知道的,因此很少有人敢用它來做大的軟件。

C++語言在類的析構函數中提供垃圾回收,由程序員決定釋放那些資源,當程序調用某個類的析構函數時,垃圾回收工作執行并完成。這實際上任然是程序員控制的方式。

Java則提供了獨立的垃圾回收機制,它無需程序員的介入,由Java虛擬機來決定何時進行垃圾回收。當然程序員在一定情況下可以強制垃圾回收機制立即工作,方法是調用system.gc下面的幾個方法(具體查書)。

具體的實現分為兩大部分,一部分是如何確定哪些是垃圾,另一部分是如何回收。

在第一部分中有兩大類方法,第一種是所謂的引用計數法,引用計數為零的自然是垃圾了,這種方法很簡單,但是無法處理相互引用的問題;第二種是所謂的順藤摸瓜法,因為Java所有的東西無非兩大類,目標和非目標,目標存在堆中,非目標存在棧中,棧的先進后出方式決定了不會有垃圾問題,而所有的目標都是Object的某代后代。從頭摸起,就可以確定誰是好人(有人要的,有領導的),誰是壞蛋(沒有人要的,沒有領導的),將壞蛋處理就是了。

第二部分又分成兩大類,同步和異步。

所謂同步就是在某一時刻所有的處理暫停,作垃圾回收,然后再繼續暫停的處理。這種方法很簡單,但是會造成系統性能的顛簸。

所謂異步就是分成兩步走,先暫停處理,進行標記;然后將系統分區,按分區分別處理壞蛋,這種方法的好處是系統性能的顛簸會減少,缺點是由于同步的問題,可能放過壞人。

PC上一般使用同步的方法,因為PC上的應用一般不太大,系統顛簸的影響不大。AS/400上一般使用異步的方法,和AS/400的系統特點(多個子系統)相結合,可以將不足降到最小,當然AS/400也可以使用同步的方法,這可以在WebSphere for AS/400中進行設置。

.Net的垃圾回收機制和Java的非常相似,這里就不贅述了。


software_young 編輯于 2002-02-01 13:55
----------------------轉載結束--------------

溫馨提示:喜歡本站的話,請收藏一下本站!

本類教程下載

系統下載排行

網站地圖xml | 網站地圖html
主站蜘蛛池模板: 宜春市| 建水县| 临潭县| 来宾市| 布拖县| 花莲县| 明光市| 江北区| 江华| 青浦区| 娱乐| 本溪市| 铁岭县| 天柱县| 宜宾市| 华安县| 怀来县| 托克逊县| 垦利县| 隆子县| 岳阳市| 揭阳市| 崇义县| 皋兰县| 都昌县| 望谟县| 房山区| 东丰县| 兰州市| 乌拉特中旗| 新丰县| 紫金县| 吉安市| 连山| 黄龙县| 九江县| 铁岭市| 玉树县| 西盟| 漳浦县| 潜江市|