1. 程式人生 > >jvm虛擬機器結構

jvm虛擬機器結構

1:jvm可操作資料型別分為原始型別和引用型別,因此存在原始值和引用值被應用在賦值,引數,返回和運算操作中,jvm希望在執行時 明確變數的型別,即編譯器編譯成class檔案需要對變數進行型別推匯出準確的型別

2:原始型別:數值型別,boolean型別,returnAddress型別 2-1:數值型別:整數型別,浮點型別 boolean型別: 值為true和false,預設為false returnAddress型別:指向一個操作碼的指標(opCode),此操作碼與jvm指令想對應,在jvm中只有returnAddress型別 在java語言資料型別中不相對

    2-2:在浮點數中,+0和-0是相等的,但對其操作會得出不同結果,任何數/+0會得到正無窮大,/-0會得到負無窮大,NAN是無序,無法用它和其
         數進行比較,全部返回false

    2-3:boolean型別在jvm中會用int資料代替表示,boolean陣列會用byte陣列代替表示

3:引用型別:類型別,陣列型別,介面型別,陣列型別最外面那一維元素的型別叫做陣列型別的元件型別

4:執行時資料區: 1:pc暫存器:每一條執行緒都有自己的pc暫存器,一條jvm執行緒在任意時刻都只會執行一個方法被稱為當前方法,如果當前方法 不是native,那麼pc暫存器儲存正在執行的指令的地址,如果是那麼就是undefined,pc暫存器大小需要滿足 returnAddress型別或平臺相關的本地指標的值 2:jvm棧:棧與執行緒同時建立,存放棧幀(Frame),用於存放區域性變數和尚未計算好的結果,另外與方法返回地址扮演了 重要的角色,除了入棧和出棧沒有其他操作影響,所有棧可以在堆中分配,不需要連續分配,棧在建立時可以固定大小, 也可以動態擴容,如果分配的棧容量大於允許的最大棧容量,將丟擲StackOverflowError,如果jvn棧動態擴充套件 超過堆允許的最大容量,將丟擲OutOfMemoryError 3:jvm堆,虛擬機器啟動就建立,執行緒共享資料區域,被存放在自動記憶體管理系統中,這些物件無法顯示的被銷燬,只能通過gc自動回收 堆可以固定容量,也可以動態擴充套件,如果超過堆允許的最大容量,將丟擲將丟擲OutOfMemoryError 4:方法區:執行緒共享資料區域,存放類的結構資訊,常量池,欄位,方法資料,位元組碼內容,還包括類,介面,例項初始化的特殊方法 方法區可以在堆中分配,容量可以固定,也可以動態擴充套件,如果方法區記憶體不足,將丟擲OutOfMemoryError

    5:執行時常量池:是class檔案中每一個類和介面的常量池表的執行時表現形式,包含了若干種不同的常量,從編譯期的數值型別
       到執行時的符號引用,類似傳統語言中的符號表,不過比傳統的符號表更為廣泛,執行時常量池都是在方法區中分配

    6:本