Java虛擬機內(nèi)存管理分析_第1頁
Java虛擬機內(nèi)存管理分析_第2頁
Java虛擬機內(nèi)存管理分析_第3頁
Java虛擬機內(nèi)存管理分析_第4頁
Java虛擬機內(nèi)存管理分析_第5頁
已閱讀5頁,還剩5頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

1、Java 虛擬機內(nèi)存管理分析王凌飛,王保保(西安電子科技大學(xué)陜西西安710071摘要:討論了Java 關(guān)鍵技術(shù)組成,深入介紹了Java 虛擬機的體系結(jié)構(gòu),分析了虛擬機中內(nèi)存管理的垃圾回收機制。同時,對現(xiàn)有的一些流行垃圾回收算法進行了深入分析和對比以及對某些算法的改進。J ava 虛擬機中存在多種垃圾回收機制,通過對Java 虛擬機中內(nèi)存管理機制的深入分析,可以使開發(fā)者針對不同的內(nèi)存分配及回收策略選擇合適的虛擬機。關(guān)鍵詞:J ava ;J ava 虛擬機;內(nèi)存管理;垃圾回收中圖分類號:TP312文獻標識碼:B 文章編號:1004373X (20070517203An Annalysis of M

2、emory Management in JVMWAN G Lingfei ,WAN G Baobao(Xidian University ,Xi an ,710071,China Abstract :This article introduces a system structure of J ava Virtual Machine and analyses the garbage collection mechanism in memory management.Meanwhile ,it also gives a deeply analysis and comparison with so

3、me current popular garbage collec 2tion algorithms.Then it promotes some of them.There are several garbage collection mechanism in J ava Virtual Machine ,through an in 2depth analysis of memory management mechanism of J VM ,we can enable developers to deal with different mem 2ory allocation and reco

4、very strategy to choose a suitable virtual machine.K eywords :J ava ;J VM ;memory management ;garbage collection收稿日期:200608161JVM 體系結(jié)構(gòu)J ava 體系結(jié)構(gòu)包含了4個獨立但相關(guān)的技術(shù):J ava 程序設(shè)計語言;Java class 文件格式;J ava 應(yīng)用編程接口(API ;J ava 虛擬機。J ava 面向網(wǎng)絡(luò)的核心就是J ava 虛擬機,他支持J ava面向網(wǎng)絡(luò)體系結(jié)構(gòu)3大支柱的所有方面:平臺無關(guān)性、安全性和網(wǎng)絡(luò)移動性。1.1體系結(jié)構(gòu)每個Java 虛擬機都

5、有一個類裝載器子系統(tǒng),他根據(jù)給定的全限定名來裝入類型(類或接口。同樣,每個Java 虛擬機都有一個執(zhí)行引擎,他負責(zé)執(zhí)行那些包含在被裝載類的方法中的指令。當(dāng)Java 虛擬機運行一個程序時,他需要內(nèi)存來存儲許多東西,例如字節(jié)碼,從已裝載的class 文件中得到的其他信息,程序創(chuàng)建的對象,傳遞給方法的參數(shù),返回值,局部變量,以及運行的中間結(jié)果等等。Java 虛擬機把這些東西都組織到幾個“運行時數(shù)據(jù)區(qū)”中,以便管理。盡管這些“運行時數(shù)據(jù)區(qū)”都會以某種形式存在于每一個J ava 虛擬機實現(xiàn)中,但是規(guī)范對他們的描述卻是相當(dāng)簡單的。這些運行時數(shù)據(jù)區(qū)結(jié)構(gòu)上的細節(jié),大多數(shù)都由具體實現(xiàn)的設(shè)計者決定。不同的虛擬機實

6、現(xiàn)可能具有不同的內(nèi)存限制,有些實現(xiàn)可能有大量的內(nèi)存可用,有些可能只有很少。有些實現(xiàn)可以利用虛擬內(nèi)存,有些則不能。規(guī)范本身對“運行時數(shù)據(jù)區(qū)”只有抽象的描述,這就使Java 虛擬機可以很容易地在各種計算機智能設(shè)備上實現(xiàn)。圖1J ava 虛擬機的結(jié)構(gòu)框圖1.2內(nèi)存分配即使是最簡單的計算機,其內(nèi)存需求量也在飛快增長,像一切有限的資源一樣,內(nèi)存也需要小心地保存和回收。高級程序設(shè)計語言必須依賴編譯器分配目標計算機的資源,其中重要的一點就是分配內(nèi)存。內(nèi)存可以通過3種方式分配:靜態(tài)分配是最簡單的內(nèi)存分配策略。程序中的所有名字在編譯時綁定在某個存儲位置上:這些綁定271電子技術(shù)王凌飛等:J ava 虛擬機內(nèi)存管

7、理分析不會在運行時改變;棧分配,塊結(jié)構(gòu)語言通過在棧上分配內(nèi)存,克服了靜態(tài)分配的一些限制。每次過程調(diào)用時,一個活動記錄或是幀被壓入系統(tǒng)棧,并在返回時彈出;堆分配與棧所遵循的后進先出的規(guī)律不同,堆中的數(shù)據(jù)結(jié)構(gòu)能夠以任意次序分配與釋放。因而活動記錄和動態(tài)數(shù)據(jù)結(jié)構(gòu)可能比創(chuàng)建他們的過程更長壽。在J ava虛擬機的堆里存放著正在運行的J ava程序所創(chuàng)建的所有對象。使用new,newarray,anewarray和mul2 tianewarray指令來創(chuàng)建對象,但是沒有專門的代碼來釋放他們,垃圾收集的工作就是自動釋放不再被程序所使用的對象的過程。對于不同的虛擬機,垃圾回收機制就成為了判斷虛擬機性能的一項指

8、標。2垃圾回收J ava虛擬機規(guī)范中沒有要求任何特定的垃圾收集技術(shù),但是顯然在發(fā)明可以無限度使用的內(nèi)存前,垃圾收集都是任何虛擬機所必須的。垃圾收集更準確的說法是“內(nèi)存回收”。當(dāng)一個對象不再被程序所引用時,他所使用的堆空間可以被回收,以便被后續(xù)的新對象所使用。垃圾收集器必須能斷定哪些對象是不再被引用的,并且能夠把他們所占據(jù)的堆空間釋放出來。在釋放不再被引用的對象的過程中,垃圾收集器只需主動運行將要被釋放的對象的終結(jié)方法(finalizer。2.1回收算法任何垃圾收集算法都必須做兩件事情。首先,他必須檢測出垃圾對象。其次,他必須回收垃圾對象所使用的堆空間并還給程序。在J ava虛擬機實現(xiàn)中,有些垃

9、圾收集器可以區(qū)別真正的對象引用和看上去像合法對象引用的基本類型(比如一個int之間的差別。例如,一個int整數(shù),如果被解釋是一個本地指針,可能指向堆中的一個對象。可是某些垃圾收集器仍然選擇不區(qū)分真正的對象引用和“偽裝品”,這種垃圾收集器被稱為保守的(conserva2 tive,因為他們可能不能總是釋放每一個不再被引用的對象。除了釋放不再被引用的對象,垃圾收集器還要處理堆碎塊。垃圾收集把用戶從釋放占用內(nèi)存的重擔(dān)中解救出來。知道何時明確地釋放內(nèi)存是非常需要技巧的。2.1.1引用計數(shù)查找算法該算法是為每一對象分配一引用計數(shù)器,當(dāng)對象創(chuàng)建時,計數(shù)器置為1,以后當(dāng)有其他的對象或根引用該對象時,計數(shù)器加

10、1,當(dāng)引用該對象的根或其他對象脫離定義范圍或被賦予其他值時,計數(shù)器減1,當(dāng)計數(shù)器為零時,回收該對象,并將被該對象引用的其他對象的計數(shù)器減1,該過程可導(dǎo)致一系列的無用單元回收。該算法的優(yōu)點是運行時間短,回收效率高。缺點是無法檢測出循環(huán)引用。循環(huán)引用是指兩個或更多的對象之間直接或間接相互引用。在循環(huán)引用的對象中,計數(shù)器不可能為零,因此即便是無用單元也不可能被回收。因此,J VM中一般不采用該算法。2.1.2跟蹤查找算法該算法首先確定一組樹根,根為Java棧的局部變量及引用對象的常數(shù)池,根確定后以根為起點,對對象引用圖進行搜索(深度優(yōu)先或廣度優(yōu)先,并標記搜索過程中遇到的對象,搜索完畢后,沒有標記的對

11、象即為無用對象。Java對象有些有finalizer(方法,有些沒有。含有該方法的垃圾對象釋放前應(yīng)執(zhí)行finalizero方法釋放系統(tǒng)資源。若某一不含finalizero方法的垃圾對象被另一含finalizer(方法的垃圾對象引用則應(yīng)先釋放后者。2.1.3壓縮算法回收對象時,不可避免地會產(chǎn)生堆碎片,為有效地利用堆,必須進行碎片合并。一般采用如下策略:壓縮策略將所有對象依次水平移動到對象堆的一端,則對象堆的另一端為連續(xù)的空白區(qū),移動的同時其他變量對被移動對象的引用修改為新的對象位置。為便于修改引用,變量引用對象時沒必要指向?qū)ο?只需引用對象柄(object handle,而對象柄直接引用對象。復(fù)

12、制策略將所有的有用對象拷貝到一個新的對象堆,在新堆中對象順序排放,從而消除碎片。舊堆則為空白區(qū)。該算法占用內(nèi)存較大,但可一邊查找一邊復(fù)制有用對象,效率較高。對象復(fù)制到新堆后,在舊堆中對象原位置處保存一位置指針,為以后查找遇到該對象時指明位置。2.1.4火車算法垃圾收集算法和明確釋放對象比起來有一個潛在的缺點,即垃圾收集算法中程序員對安排CPU時間迸行內(nèi)存回收缺乏控制。要精確地預(yù)測出何時(甚至是否進行垃圾收集、收集需要多長時間,基本上都是不可能的。因為垃圾收集一般都會停止整個程序的運行來查找和收集垃圾對象,他們可能在程序執(zhí)行的任意時刻暫停,并且暫停的時間也無法確定?;疖囁惴ㄗ钤缡怯衫聿榈鹿律?

13、Richardh Hudson和埃里特莫斯(Eliot Moss提出的,目前正用于Sun公司的Hot spot虛擬機,該算法詳細說明了按代收集的垃圾收集器的成熟對象空間的組織?;疖囁惴ǖ哪康氖菫榱嗽诔墒鞂ο罂臻g提供限定時間的漸進收集?;疖囁惴ò殉墒鞂ο罂臻g劃分為固定長度的內(nèi)存塊、算法每次在一個塊中單獨執(zhí)行?!盎疖囁惴ā边@個名字來源于算法組織這些塊的方式。每一個塊屬于一個集合。在一個集合內(nèi)的塊排了序,這些集合本身也排了序。在哈德森和莫斯的原始論文中,為了更好地解釋算法,把塊叫做“車廂”,把集合叫做“火車”。使用這個比喻,成熟對象空間扮演火車站的角色,同一個集合中的塊被排序,就如同一列火車中的車廂

14、是有順序的。成熟對象空間中的集371現(xiàn)代電子技術(shù)2007年第5期總第244期 電子技術(shù)應(yīng)用合被排序,很像在火車站中火車按照軌道l、軌道2、軌道3等排列。每一次火車算法被執(zhí)行的時候,他要么收集最小數(shù)字火車中的最小數(shù)字車廂,要么收集整列最小數(shù)字火車。算法首先檢查指向最小數(shù)字火車中任何車廂的引用,如果不存在任何來自最小數(shù)字火車以外的引用指向他內(nèi)部包含的對象,那么整列最小數(shù)字火車包含的都是垃圾,可以被拋棄。這第一步使得火車算法可以一次收集大型的、無法在一個塊中容納的循環(huán)數(shù)據(jù)結(jié)構(gòu)。在下面將要描述的火車算法步驟中,這種大型的循環(huán)數(shù)據(jù)結(jié)構(gòu),保證可以在同一火車中被銷毀?;疖囁惴ǖ哪繕耸菫榱颂峁┫薅〞r間內(nèi)的按代

15、收集的收集器中成熟對象空間的漸進式收集。因為塊(車廂可以指定一個最大尺寸限度,并且每一次執(zhí)行只收集一個塊,大部分情況下,火車算法可以保證每次的執(zhí)行時間在某個最長時間限度以內(nèi)。不過,火車算法不能確保每一次執(zhí)行都在最長時間限度之內(nèi),因為算法不僅僅是拷貝對象。為了促進收集過程,火車算法使用了記憶集合。一個記憶集合是一個數(shù)據(jù)結(jié)構(gòu)他包含了所有對一節(jié)車廂或者一列火車的外部引用。算法為成熟對象空間內(nèi)每節(jié)車廂和每列火車都維護一個記憶集合。所以,一節(jié)特定車廂的記憶集合包含了指向車廂內(nèi)對象的所有引用(或“記憶與的集合”。一個空的記憶集合顯示車廂或者火車中的對象都不再被車廂或者火車外的任何變量引用(已經(jīng)被“遺忘”。

16、被遺忘的對象就是不可觸及的,可以被垃圾收集。3結(jié)語垃圾回收是J ava語言的一大特色,因為他使得Java 語言成為一種簡單而安全的語言。但是垃圾回收并不是Java的創(chuàng)舉,早在10多年前,在Lisp語言和函數(shù)式語言等領(lǐng)域,垃圾回收己經(jīng)逐漸成熟,但是今天垃圾收集已經(jīng)成為許多現(xiàn)代程序設(shè)計語言內(nèi)存管理系統(tǒng)的重要部分。本文首先談了垃級收集對內(nèi)存分配與管理中起到的作用,然后綜述了比較流行的使用于Java虛擬機的實現(xiàn)中的幾種垃圾回收算法。然而對于不同的虛擬機所采取的垃圾回收算法也有所不同,這也有待進一步研究。參考文獻1The J avaVirtual Machine Specification.http:/

17、/docs/books/vmspec/2nd2edition/html/Preface.doc.htm1,1999.2Christopher J F.Pickett and Clark Verbrugge,Return ValuePrediction in A Java Virtual Machine.http:/www.sable.pdf,October,2004.3美Bill Venners.深入J ava虛擬機M.曹曉鋼,蔣靖,譯.北京:機械工業(yè)出版社,2003.作者簡介王凌飛男,1980年出生,陜西銅川人,碩士研究生。研究方向為計算機技術(shù)與應(yīng)用。王保保教授,碩士

18、生導(dǎo)師。研究方向為網(wǎng)絡(luò)數(shù)據(jù)庫與智能計算。(上接第171頁所以DMA可以直接讀取FIFO中的數(shù)據(jù)。啟動DMA控制器即可實現(xiàn)從FIFO到SDRAM存儲器之間的數(shù)據(jù)傳輸。2個FIFO的數(shù)據(jù)“滿”信號分別連接到帶有中斷功能PIO口。當(dāng)其中一個FIFO數(shù)據(jù)滿時,系統(tǒng)將自動切換到另一個FIFO,同時產(chǎn)生中斷,啟動DMA,將已經(jīng)滿的FIFO中的數(shù)據(jù)保存到SDRAM中。4結(jié)語本文提出了一種基于SOPC技術(shù)的線陣CCD數(shù)據(jù)采集和存儲系統(tǒng)的實現(xiàn)方法。使用高速A/D轉(zhuǎn)換器、2個小容量的FIFO和SOPC Builder開發(fā)組件中的DMA模塊完成了數(shù)據(jù)采集和存儲功能,實現(xiàn)方法簡單,能夠進行數(shù)據(jù)的連續(xù)采集存儲。該方法占用CPU時間短,使CPU有更多時間進行后續(xù)的數(shù)據(jù)處理工作。該系統(tǒng)在Altera公司的Cyclone FP GA實現(xiàn),具有開發(fā)周期短、集成度高等特點。軟硬件均采用編程實現(xiàn),設(shè)計靈活,容易修改,在實際應(yīng)用中收到很好的效果。參考文獻1潘松,黃繼業(yè),曾毓.SOPC技術(shù)實用教程M.北京:清華大學(xué)出版社,2005.2于長勝,周永勤.基于CPLD的高速采集系統(tǒng)設(shè)計J.應(yīng)用科

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論