Java虛擬機器的原理是怎樣的?學習一下吧

weixin_33670713發表於2017-11-06

Java虛擬機器是一個可以執行Java位元組碼的虛擬機器程式。Java原始檔被編譯成能被Java虛擬機器執行的位元組碼檔案。

Java是平臺無關的語言是指用Java寫的應用程式不用修改就可在不同的軟硬體平臺上執行。平臺無關有兩種:原始碼級和目的碼級。C和C++具有一定程度的原始碼級平臺無關,表明用C或C++寫的應用程式不用修改只需重新編譯就可以在不同平臺上執行。

Java主要靠Java虛擬機器(JVM)在目標碼級實現平臺無關性。JVM是一種抽象機器,它附著在具體作業系統之上,本身具有一套虛機器指令,並有自己的棧、暫存器組等。但JVM通常是在軟體上而不是在硬體上實現。(目前,SUN系統公司已經設計實現了Java晶片,主要使用在網路計算機NC上。另外,Java晶片的出現也會使Java更容易嵌入到家用電器中。)JVM是Java平臺無關的基礎,在JVM上,有一個Java直譯器用來解釋Java編譯器編譯後的程式。Java程式設計人員在編寫完軟體後,通過Java編譯器將Java源程式編譯為JVM的位元組程式碼。任何一臺機器只要配備了Java直譯器,就可以執行這個程式,而不管這種位元組碼是在何種平臺上生成的。另外,Java採用的是基於IEEE標準的資料型別。通過JVM保證資料型別的一致性,也確保了Java的平臺無關性。


7823377-aa92ffcf289e4921.jpg

Java虛擬機器通過呼叫某個指定類的方法main啟動,傳遞給main一個字串陣列引數,使指定的類被裝載,同時連結該類所使用的其它的型別,並且初始化它們。例如對於程式:

public class HelloApp {

public static void main(String[] args){

System.out.println("Hello World!");

for (int i = 0; i < args.length; i++ ) {

System.out.println(args);

}

}

}

編譯後在命令列模式下鍵入:java HelloApp run virtual machine

將通過呼叫HelloApp的方法main來啟動java虛擬機器,傳遞給main一個包含三個字串"run"、"virtual"、"machine"的陣列。現在我們略述虛擬機器在執行HelloApp時可能採取的步驟。

相關文章