Java虛擬機器內部結構

yuan22003發表於2011-08-26

Java虛擬機器的內部體系結構也許很少有人去關心,因為對於Java程式設計師來說,一般只需要跟API打交道就可以了。這些體系結構只是Java虛擬機器內部的結構而已。但是如果理解了其內部結構,對於我們開發專案,以及排除系統中的相關故障是由幫助的。

先看看總體結構圖,如下:

各部分的主要功能分別是:
1. 類裝載子系統:負責Java型別的裝載連線以及初始化。Java虛擬機器有兩種類裝載器,啟動類裝載器和使用者自定義類裝載器。啟動類裝載器是JAVA虛擬機器實現的一部分,自定義裝載器是JAVA程式的一部分。由不同類裝載器裝載的類將被放在不同的名稱空間中。
2. 方法區:方法區主要儲存2類資訊,一是被裝載的型別資訊,從class檔案流中提取。二是型別中的類(靜態)變數。方法區中的資訊是所有執行緒共享的,所以對方法區的資料訪問必須設計成為執行緒安全的。
3. Java堆:存放java執行時建立的所有類例項或陣列。一個java虛擬機器例項中只存在一個堆空間,所有執行緒共享,因此設計程式時也要考慮到多執行緒訪問堆資料的同步問題。
4. Java棧:每當啟動一個新執行緒,JAVA虛擬機器都會建立一個新的JAVA棧,用於儲存執行緒的執行狀態。JAVA棧中的資料都是私有的,執行緒之間不能相互訪問各自的棧。當一個執行緒呼叫一個方法時,方法的區域性變數儲存在該執行緒的棧中。所以方法內建立的區域性變數都不存線上程安全問題。
5. PC暫存器:有叫程式計數器。每個執行緒都有自己的程式計數器,線上程啟動的時候自動建立。PC暫存器裡總是儲存下一條將被執行的指令的“地址”。
6. 本地方法棧:儲存呼叫本地方法相關的資料。這裡基本是一個全新的不受虛擬機器限制的區域。
7. 執行引擎:執行引擎是java虛擬機器的核心。其行為由一系列的指令集來定義。

相關文章