Java虛擬機內部結構——JVM8

Java Java虛擬機 編程語言 編譯器 Java團長 2017-05-23

Java虛擬機內部結構——JVM8

JVM規範描述的是一種抽象化的虛擬機的行為,而不是任何一種廣泛使用的虛擬機實現。

要去“正確地”實現一臺Java虛擬機,其實並不像大多數人所想的那樣高深和困難——只需要正確讀取class文件中每一條字節碼指令,並且能正確執行這些指令所蘊含的操作即可。

所有在虛擬機規範之中沒有明確描述的實現細節,都不應成為虛擬機設計者發揮創造性的牽絆,設計者可以完全自主決定所有規範中不曾描述的虛擬機內部細節,

例如,運行時數據區的內存如何佈局,選用哪種垃圾收集算法,是否要對虛擬機字節碼指令進行一些內部優化操作(如使用即時編譯器把字節碼編譯為機器碼)。

1. Class文件格式

編譯後被Java虛擬機所執行的代碼使用了一種平臺中立(不依賴於特定硬件及操作系統)的二進制格式來表示,並且經常(但並非絕對)以文件的形式存儲,因此這種格式稱為class文件格式。

class文件格式中精確地定義了類與接口的表示形式,包括在平臺相關

的目標文件格式中一些細節上的慣例,例如字節序( byte ordering)等。

2. 數據類型

與Java程序語言中的數據類型相似,Java虛擬機可以操作的數據類型可分為兩類:原始類型(primitivetype,也經常翻譯為原生類型或者基本類型)和引用類型(reference type)

與之對應,也存在原始值( primitive value)和引用值(reference value)兩種類型的數值,它們可用於變量賦值、參數傳遞、方法返回和運算操作。

Java虛擬機是直接支持對象的。這裡的對象可以是指動態分配的個類的實例,也可以指某個數組。虛擬機中使用reference類型來表示對某個對象的引用。關於reference類型的值,你可以想象成指向對象的指針。每一個對象都可能存在多個指向它的引用,對象的操作、傳遞和檢查都通過引用它的reference類型的數據來進行

3. 原始類型與值

3.1 數值類型,boolean類型和returnAddress類型

Java虛擬機所支持的原始數據類型包括數值類型(numeric type)、boolean類型和returnAddress類型三類。

數值類型又分為整數類型(integral type)和浮點類型(floating-point type,)兩種。

整數類型包括:

口byte類型:值為8位有符號二進制補碼整數,默認值為零。

口short類型:值為16位有符號二進制補碼整數,默認值為零。

口int類型:值為32位有符號二進制補碼整數,默認值為零。

口long類型:值為64位有符號二進制補碼整數,默認值為零。

口char類型:值為使用16位無符號整數表示的Unicode碼點,以UTF-16編碼,默認值為Unicode的null碼點( ‘

相關推薦

推薦中...