Linux雲端計算技術學習:虛擬機器基本結構講解

千鋒雲端計算發表於2019-07-04

我們要對JVM虛擬機器的結構有一個感性的認知。畢竟我們不是程式設計人員,認知程度達不到那麼深入。一個執行時的Java虛擬機器例項的天職是:負責執行一個java程式。當啟動一個Java程式時,一個虛擬機器例項也就誕生了。當該程式關閉退出,這個虛擬機器例項也就隨之消亡。如果同一臺計算機上同時執行三個Java程式,將得到三個Java虛擬機器例項。每個Java程式都執行於它自己的Java虛擬機器例項中。

Linux雲端計算技術學習:虛擬機器基本結構講解

1、類載入子系統

負責從檔案系統或者網路中載入Class資訊,載入的類資訊存放於一塊稱為方法區的記憶體空間。除了類資訊外,方法區中可能還會存放執行時常量池資訊,包括字串字面量和數字量。

2、Java堆

在虛擬機器啟動的時候建立,它是Java程式最主要的記憶體工作區域。幾乎所有的Java物件例項都放Java堆中。堆空間是所有執行緒共享的,這是一塊與Java應用密切相關的記憶體區間。

3、Java的NIO庫(直接記憶體)

允許Java程式使用直接記憶體。直接記憶體是在Java堆外的、直接向系統申請的記憶體區間。通常訪問直接記憶體的速度會優於Java堆。因此出於效能考慮,讀寫頻繁的場合可能會考慮使用直接記憶體。由於直接記憶體在Java堆外,因此它的大小不會受限於Xmx指定的最大堆大小。但是系統記憶體是有限的,Java堆和直接記憶體的總和依然受限於作業系統能給出的最大記憶體。

Linux雲端計算技術學習:虛擬機器基本結構講解

4、垃圾回收系統

垃圾回收系統是Java虛擬機器的重要組成部分,垃圾回收器可以對方法區、Java堆和直接記憶體進行回收。

5、Java棧

每一個Java虛擬機器執行緒都有一個私有的Java棧。一個執行緒的Java棧線上程建立的時候被建立。Java儲存著幀資訊,Java棧中儲存著區域性變數、方法引數,同時和Java方法的呼叫、返回密切相關。

6、本地方法

與Java棧非常類似,最大的不同在於Java棧用於Java方法的呼叫,而本地方法棧用於本地方法呼叫。作為Java虛擬機器的重要擴充套件,Java虛擬機器執行Java程式直接呼叫本地方法(通常使用C編寫)。

Linux雲端計算技術學習:虛擬機器基本結構講解

7、PC暫存器

每個執行緒私有的空間,Java虛擬機器會為每一個Java執行緒建立PC暫存器。在任意時刻,一個Java執行緒總是在執行一個方法,這個正在被執行的方法稱為當前方法。如果當前方法不是本地方法,PC暫存器就會指向當前正在被執行的指令。如果當前方法是本地方法,那麼PC寄存的值就是undefined.

8、執行引擎

是Java虛擬機器最核心元件之一,它負責執行虛擬機器的位元組碼。現代虛擬機器為了提高執行效率。會使用即時編譯技術將方法編譯成機器碼後再執行。


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69916964/viewspace-2649548/,如需轉載,請註明出處,否則將追究法律責任。

相關文章