JVM的內(nèi)存機制介紹.doc

JVM的內(nèi)存機制介紹.doc

ID:62033680

大小:363.50 KB

頁數(shù):11頁

時間:2021-04-15

JVM的內(nèi)存機制介紹.doc_第1頁
JVM的內(nèi)存機制介紹.doc_第2頁
JVM的內(nèi)存機制介紹.doc_第3頁
JVM的內(nèi)存機制介紹.doc_第4頁
JVM的內(nèi)存機制介紹.doc_第5頁
資源描述:

《JVM的內(nèi)存機制介紹.doc》由會員上傳分享,免費在線閱讀,更多相關(guān)內(nèi)容在教育資源-天天文庫。

1、本文分為兩個部分:?1,JVMspecifications(JVM規(guī)范) 對JVM內(nèi)存的描述2,Sun的JVM的內(nèi)存機制。?JVM specification對JVM內(nèi)存的描述首先我們來了解JVMspecification中的JVM整體架構(gòu)。如下圖:?????主要包括兩個子系統(tǒng)和兩個組件:Classloader(類裝載器)子系統(tǒng),Executionengine(執(zhí)行引擎) 子系統(tǒng);Runtimedat(yī)aarea (運行時數(shù)據(jù)區(qū)域)組件,?。危幔簦関einterface(本地接口)組件.????Classloader子系統(tǒng)的作用:根據(jù)給定的全限

2、定名類名(如java.lang.Object)來裝載class文件的內(nèi)容到Runtimedata area中的methodarea(方法區(qū)域)。Javsa程序員可以extends java.lang。ClassLoader類來寫自己的Classloader。?????Executionengine子系統(tǒng)的作用 :執(zhí)行classes中的指令。任何JVMspecification實現(xiàn)(JDK)的核心是Execution engine,換句話說:Sun的JDK和IBM的JDK好壞主要取決于他們各自實現(xiàn)的Execution?engine的好壞。每個運

3、行中的線程都有一個Executionengine的實例?!????? Nat(yī)iveinterface組件:與nativelibraries交互,是其它編程語言交互的接口。?????? Runtimedataarea 組件:這個組件就是JVM中的內(nèi)存?!∠旅鎸@個部分進行詳細介紹。Runtime dat(yī)a area的整體架構(gòu)圖本文為互聯(lián)網(wǎng)收集,請勿用作商業(yè)用途Runtimedataarea主要包括五個部分:Heap(堆),Method?。羠ea(方法區(qū)域),Java?。觮ack(java的棧),Program Counter(程序計數(shù)器),?。?/p>

4、ative?。韊thodstack(本地方法棧)。Heap和MethodArea是被所有線程的共享使用的;而Java stack,Programcounter和Nativemethodstack是以線程為粒度的,每個線程獨自擁有。?Heap?。蔭va程序在運行時創(chuàng)建的所有類實或數(shù)組都放在同一個堆中。而一個Java虛擬實例中只存在一個堆空間,因此所有線程都將共享這個堆。每一個java程序獨占一個JVM實例,因而每個java程序都有它自己的堆空間,它們不會彼此干擾。但是同一java程序的多個線程都共享著同一個堆空間,就得考慮多線程訪問對象(堆數(shù)據(jù)

5、)的同步問題。(這里可能出現(xiàn)的異常java.lang.OutOfMemoryError:Javaheapspace)?Methodarea在Java虛擬機中,被裝載的class的信息存儲在Methodarea的內(nèi)存中。當虛擬機裝載某個類型時,它使用類裝載器定位相應的class文件,然后讀入這個class文件內(nèi)容并把它傳輸?shù)教摂M機中.緊接著虛擬機提取其中的類型信息,并將這些信息存儲到方法區(qū).該類型中的類(靜態(tài))變量同樣也存儲在方法區(qū)中。與Heap一樣,method?。醨ea是多線程共享的,因此要考慮多線程訪問的同步問題.比如,假設(shè)同時兩個線程都

6、企圖訪問一個名為Lava的類,而這個類還沒有內(nèi)裝載入虛擬機,那么,這時應該只有一個線程去裝載它,而另一個線程則只能等待。(這里可能出現(xiàn)的異常java.lang.OutOfMemoryError:PermGenfull)?Javastack???????Javastack以幀為單位保存線程的運行狀態(tài).虛擬機只會直接對Java stack執(zhí)行兩種操作:以幀為單位的壓棧或出棧。每當線程調(diào)用一個方法的時候,就對當前狀態(tài)作為一個幀保存到javastack中(壓棧);當一個方法調(diào)用返回時,從javastack彈出一個幀(出棧).棧的大小是有一定的限制,這

7、個可能出現(xiàn)StackOverFlow問題。 下面的程序可以說明這個問題。本文為互聯(lián)網(wǎng)收集,請勿用作商業(yè)用途publicclass TestStackOverFlow?。?publicstat(yī)ic voidmain(String[]args) {?Recursiver=newRecursive();?r.doit(10000);??//Exceptioninthread”main”java.lang.StackOverflowError}}classRecursive{?publicint doit(intt){?if (t<=1) {??re

8、turn1;??}?return t?。玠oit(t — 1);?}}??Programcounter 每個運行中的Java程序,每一個線程都有它自己的PC寄存器,

當前文檔最多預覽五頁,下載文檔查看全文

此文檔下載收益歸作者所有

當前文檔最多預覽五頁,下載文檔查看全文
溫馨提示:
1. 部分包含數(shù)學公式或PPT動畫的文件,查看預覽時可能會顯示錯亂或異常,文件下載后無此問題,請放心下載。
2. 本文檔由用戶上傳,版權(quán)歸屬用戶,天天文庫負責整理代發(fā)布。如果您對本文檔版權(quán)有爭議請及時聯(lián)系客服。
3. 下載前請仔細閱讀文檔內(nèi)容,確認文檔內(nèi)容符合您的需求后進行下載,若出現(xiàn)內(nèi)容與標題不符可向本站投訴處理。
4. 下載文檔時可能由于網(wǎng)絡(luò)波動等原因無法下載或下載錯誤,付費完成后未能成功下載的用戶請聯(lián)系客服處理。