1. 程式人生 > >培訓雲計算學校,虛擬機基本結構講解

培訓雲計算學校,虛擬機基本結構講解

虛擬機

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

1、類加載子系統

負責從文件系統或者網絡中加載Class信息,加載的類信息存放於一塊稱為方法區的內存空間。除了類信息外,方法區中可能還會存放運行時常量池信息,包括字符串字面量和數字量。
2、Java堆
在虛擬機啟動的時候建立,它是Java程序最主要的內存工作區域。幾乎所有的Java對象實例都放Java堆中。堆空間是所有線程共享的,這是一塊與Java應用密切相關的內存區間。

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

4、垃圾回收系統
垃圾回收系統是Java虛擬機的重要組成部分,垃圾回收器可以對方法區、Java堆和直接內存進行回收。
5、Java棧
每一個Java虛擬機線程都有一個私有的Java棧。一個線程的Java棧在線程創建的時候被創建。Java保存著幀信息,Java棧中保存著局部變量、方法參數,同時和Java方法的調用、返回密切相關。

6、本地方法
與Java棧非常類似,最大的不同在於Java棧用於Java方法的調用,而本地方法棧用於本地方法調用。作為Java虛擬機的重要擴展,Java虛擬機運行Java程序直接調用本地方法(通常使用C編寫)。

7、PC寄存器
每個線程私有的空間,Java虛擬機會為每一個Java線程創建PC寄存器。在任意時刻,一個Java線程總是在執行一個方法,這個正在被執行的方法稱為當前方法。如果當前方法不是本地方法,PC寄存器就會指向當前正在被執行的指令。如果當前方法是本地方法,那麽PC寄存的值就是undefined.
8、執行引擎
是Java虛擬機最核心組件之一,它負責執行虛擬機的字節碼。現代虛擬機為了提高執行效率。會使用即時編譯技術將方法編譯成機器碼後再執行。

培訓雲計算學校,虛擬機基本結構講解