一、什么是Java虛擬機⑴
Java虛擬機是一個(gè)想象中的機器,在實(shí)際的計算機上通過(guò)軟件模擬來(lái)實(shí)現。Java虛擬機
有自己想象中的硬件,如處理器、堆棧、寄存器等,還具有相應的指令系統。
1.為什么要使用Java虛擬機?
Java語(yǔ)言的一個(gè)非常重要的特點(diǎn)就是與平臺的無(wú)關(guān)性。而使用Java虛擬機是實(shí)現這一
特點(diǎn)的關(guān)鍵。
一般的高級語(yǔ)言如果要在不同的平臺上運行,至少需要編譯成不同的目標代碼。而引
入Java語(yǔ)言虛擬機后,Java語(yǔ)言在不同平臺上運行時(shí)不需要重新編譯,如圖所示。
圖Java語(yǔ)言使用模式
Java虛擬機屏蔽了與具體平臺相關(guān)的信息,使得Java語(yǔ)言編譯程序只需生成在Java虛擬
機上運行的目標代碼(字節碼),就可以在多種平臺上不加修改地運行。Java虛擬機在執行
字
節碼時(shí),把字節碼解釋成具體平臺上的機器指令執行。
2.誰(shuí)需要了解Java虛擬機⑴
Java虛擬機是Java語(yǔ)言底層實(shí)現的基礎,對Java語(yǔ)言感興趣的人都應對Java虛擬機有個(gè)大
概的了解。這有助于理解Java語(yǔ)言的一些性質(zhì),也有助于使用Java語(yǔ)言。
對于要在特定平臺上實(shí)現Java虛擬機的軟件人員,Java語(yǔ)言的編譯器作者以及要用硬件
芯片實(shí)現Java虛擬機的人來(lái)說(shuō),則必須深刻理解Java虛擬機的規范。另外,如果你想擴展
Java語(yǔ)言,或是把其它語(yǔ)言編譯成Java語(yǔ)言的字節碼,你也需要深入地了解Java虛擬機。
3.Java虛擬機支持的數據類(lèi)型
Java虛擬機支持Java語(yǔ)言的基本數據類(lèi)型如下:
byte://1字節有符號整數的補碼
short://2字節有符號整數的補碼
int://4字節有符號整數的補碼
long://8字節有符號整數的補碼
float://4字節IEEE754單精度浮點(diǎn)數
double://8字節IEEE754雙精度浮點(diǎn)數
char://2字節無(wú)符號Unicode字符
幾乎所有的Java類(lèi)型檢查都是在編譯時(shí)完成的。上面列出的原始數據類(lèi)型的數據在
Java執行時(shí)不需要用硬件標記。操作這些原始數據類(lèi)型數據的字節碼(指令)本身就已經(jīng)
指
出了操作數的數據類(lèi)型,例如iadd、ladd、fadd和dadd指令都是把兩個(gè)數相加,其操作數
類(lèi)型
別是int、long、float和double。
虛擬機沒(méi)有給boolean(布爾)類(lèi)型設置單獨的指令。boolean型的數據是由integer指令,
包括
integer返回來(lái)處理的。boolean型的數組則是用byte數組來(lái)處理的。
虛擬機使用IEEE754格式的浮點(diǎn)數。不支持IEEE格式的較舊的計算機,在運行Java數值計
算程序時(shí),可能會(huì )非常慢。
虛擬機支持的其它數據類(lèi)型包括:
object//對一個(gè)Javaobject(對象)的4字節引用
returnAddress//4字節,用于jsr/ret/jsr-w/ret-w指令
注:Java數組被當作object處理。
虛擬機的規范對于object內部的結構沒(méi)有任何特殊的要求。在Sun公司的實(shí)現中,對
object的引用是一個(gè)句柄,其中包含一對指針:一個(gè)指針指向該object的方法表,另一個(gè)指
向
該object的數據。
用Java虛擬機的字節碼表示的程序應該遵守類(lèi)型規定。Java虛擬機的實(shí)現應拒絕執行
違反了類(lèi)型規定的字節碼程序。
Java虛擬機由于字節碼定義的限制似乎只能運行于32位地址空間的機器上。但是可以
創(chuàng )建一個(gè)Java虛擬機,它自動(dòng)地把字節碼轉換成64位的形式。
從Java虛擬機支持的數據類(lèi)型可以看出,Java對數據類(lèi)型的內部格式進(jìn)行了嚴格規定,這
樣使得各種Java虛擬機的實(shí)現對數據的解釋是相同的,從而保證了Java的與平臺無(wú)關(guān)性和
可
移植性。
--




聯(lián)系客服
微信登錄中...
請勿關(guān)閉此頁(yè)面



