深入理解JVM內幕:從基本結構到Java 7新特性

轉自http://www.importnew.com/1486.html

每個Java開發者都知道Java字節碼是執行在JRE((Java Runtime Environment Java運行時環境)上的。JRE中最重要的部分是Java虛擬機(JVM),JVM負責分析和執行Java字節碼。

虛擬機(Virtual Machine)

JRE是由Java API和JVM組成的。JVM的主要作用是通過Class Loader來加載Java程序,並且按照Java API來執行加載的程序。

虛擬機是通過軟件的方式來模擬實現的機器(比如說計算機),它可以像物理機一樣運行程序。設計虛擬機的初衷是讓Java能夠通過它來實現WORA(Write Once Run Anywhere 一次編譯,到處運行),儘管這個目標現在已經被大多數人忽略了。因此,JVM可以在不修改Java代碼的情況下,在所有的硬件環境上運行Java字節碼

Java虛擬機的特點如下:

  • 基於棧的虛擬機:Intel x86和ARM這兩種最常見的計算機體系的機構都是基於寄存器的。不同的是,JVM是基於棧的。
  • 符號引用:除了基本類型以外的數據(類和接口)都是通過符號來引用,而不是通過顯式地使用內存地址來引用。
  • 垃圾回收機制:類的實例都是通過用戶代碼進行創建,並且自動被垃圾回收機制進行回收。
  • 通過對基本類型的清晰定義來保證平臺獨立性:傳統的編程語言,例如C/C++,int類型的大小取決於不同的平臺。JVM通過對基本類型的清晰定義來保證它的兼容性以及平臺獨立性。
  • 網絡字節碼順序:Java class文件用網絡字節碼順序來進行存儲:爲了保證和小端的Intel x86架構以及大端的RISC系列的架構保持無關性,JVM使用用於網絡傳輸的網絡字節順序,也就是大端。

雖然是Sun公司開發了Java,但是所有的開發商都可以開發並且提供遵循Java虛擬機規範的JVM。正是由於這個原因,使得Oracle HotSpot和IBM JVM等不同的JVM能夠並存。Google的Android系統裏的Dalvik VM也是一種JVM,雖然它並不遵循Java虛擬機規範。和基於棧的Java虛擬機不同,Dalvik VM是基於寄存器的架構,因此它的Java字節碼也被轉化成基於寄存器的指令集。




發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章