五大元素組成JVM結構
這里和大家重點描述一下JVM結構的組成和用法,JVM結構由五個部分組成,他們分別是一組指令集、一組寄存器、一個棧、一個無用單元收集堆(Garbage-collected-heap)、一個方法區(qū)域。
JVM結構組成
虛擬機JVM結構由寄存器、棧、廢區(qū)收集堆、存儲區(qū)和指令集五部分組成。下面我們將逐一作出介紹。
1.寄存器(Registers)
同其他微處理器的寄存器一樣,JVM機構的寄存器用來存放當前系統(tǒng)狀態(tài)。然而,基于移植性要求,JVM擁有的寄存器數(shù)目不能過多。否則,對于任何本身的寄存器個數(shù)小于JVM的移植目標機,要用常規(guī)存儲來模擬高速寄存器,是比較困難的。同時JVM是基于棧(Stack)的,這也使得它擁有的寄存器較少。
JVM的寄存器包括下面四個:
(1)PC程序計數(shù)寄存器
(2)optop操作數(shù)棧棧頂?shù)刂芳拇嫫鳌?/p>
(3)frame當前執(zhí)行環(huán)境地址寄存器。
(4)vars局部變量首地址寄存器。
這些寄存器長度均為32位。其中PC用來記錄程序執(zhí)行步驟,其余optop,frame,vars都存放JVM棧中對應地址,用來快速獲取當前執(zhí)行所需的信息。
2.棧(Stack)
JVM機構是以棧為基本存儲機制的處理機。棧的特點是先進后出(FILO)。對每個類的每個方法,JVM都定義一定的棧空間,包含下面三種信息:
(1)LocalVariables局部變量
這是一個記錄各方法局部變量的數(shù)組,其初始地址存放在vars寄存器中。每一個數(shù)組元素的長度均為32位。若變量長度超過32位,如雙精度浮點變量或長整型變量,則占據(jù)兩個元素的空間64位。
(2)ExecutionEnviroment執(zhí)行環(huán)境
包含代表當前方法的棧的當前狀態(tài)。存儲的信息有:
◆激活的前一個方法。
◆指向局部變量區(qū)的指針。
◆指向操作數(shù)棧頂和棧底的指針。
執(zhí)行環(huán)境是執(zhí)行方法的控制中心,為解釋執(zhí)行和重新編譯提供必要的信息。例如,解釋器執(zhí)行JVM的指令iadd,將兩整型數(shù)相加,執(zhí)行分為若干步。首先,解釋器從寄存器frame中獲得當前執(zhí)行環(huán)境。然后,在當前執(zhí)行環(huán)境中指向操作數(shù)棧頂?shù)闹羔槪〕鲆嗉拥膬蓴?shù)。***還要將所加得的結果回送入棧。
(3)OperandStack操作棧
這是一個以32位為單位長度,用來存儲JVM指令的參數(shù)的區(qū)域。
3.廢區(qū)收集堆(Garbage-CollectedHeap)
所有的類被實例化時,所獲得的存儲空間都是從收集堆中分配的。此外,這個堆還要負責無用空間的回收使用。出于移植性和安全性考慮,Java不賦予程序設計員管理內存空間的權力。因而,在編譯用new命令申請新對象存儲空間后,由解釋器負責跟蹤記錄這一塊內存的使用情況。當使用結束時,回收空間送回堆中。在Sun公司的Java和HotJava環(huán)境中,這樣的“廢區(qū)收集”都是作為后臺線程運行的,保證了系統(tǒng)運行的高效性。
4.存儲區(qū)(MemoryArea)
JVM機構有兩個重要的存儲區(qū)域,即方法區(qū)(methodarea)和常數(shù)池區(qū)(constantpoolarea)。
方法區(qū)存放的是類中定義的各方法的二進制字節(jié)碼。常數(shù)池區(qū)存放的則是方法名、類名、域名以及字符串常數(shù)。
5.指令集(InstructionSet)
指令集是JVM執(zhí)行的操作碼的集合。Java編譯器就是將Java源程序轉換成JVM的程序:一組JVM指令。
JVM指令都由一個操作碼(opcode)帶上零個、一個或兩個操作數(shù)(operand)組成。操作數(shù)長度不盡相同,以8位為基本長度,超過8位時按BigEndian的順序截斷組合,即高位存放在低地址字節(jié)中,而低位存放在高地址字節(jié)中。操作碼長度均為8位。這限制了指令種類最多只能為256(28)種。目前已經(jīng)被定義使用的操作碼有160種,它們包括棧操作、數(shù)組操作、算術運算、邏輯運算、數(shù)據(jù)類型轉換、控制流程操作、斷點和異常處理等豐富而詳盡的內容,這里不再一一贅述。
【編輯推薦】
- Java虛擬機概念及體系結構
- 發(fā)現(xiàn)Java虛擬機內存泄露問題
- 深入Java虛擬機:JVM中的Stack和Heap
- Java虛擬機發(fā)展回顧 為跨平臺而生
- Java虛擬機(JVM)中的內存設置詳解























