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