究竟什麼是Java虛擬機器(JVM)?
我們都知道,在Windows上,軟體包字尾有exe,而蘋果的Mac OS X系統上沒有安裝exe。類似地,Mac OSX系統上的軟體安裝包是dmg字尾,不能安裝在Windows系統上。
為什麼不能安裝不同系統上的軟體,因為作業系統的底層實現是不同的。對於Windows系統,exe字尾的軟體程式碼被編譯成能被Windows系統識別的機器程式碼。對於Mac OSX系統,最後將DMG字尾的軟體程式碼編譯為Mac OSX系統識別的程式碼。
系統軟體不能通用是一個普遍的問題。但是所有使用Java的學生都知道Java程式碼可以在伺服器端(Linux系統)或Windows系統上執行,但是我們還沒有生成許多不同的程式碼。那麼Java語言是如何做到這一點的呢?
與其他語言不同,Java語言不直接編譯程式碼到系統相關的機器程式碼,而是將其編譯成特定的語言規範,我們稱之為位元組碼。無論在Windows、Mac OSX還是Linux系統中,Java程式都要編譯成位元組碼檔案,它們只能在那之後執行。
但是,即使編譯成位元組碼檔案,系統仍然不能理解位元組碼檔案的內容,然後需要Java虛擬機器的幫助。Java虛擬機器會解析位元組碼檔案的內容,並將它們轉換成作業系統能夠理解的機器程式碼。
簡單地說,對於同一個Java原始檔,我們把它編譯成位元組碼,它既沒有Linux也沒有Windows系統知道。在這一點上,Java虛擬機器是一個翻譯器。它被轉換為Linux系統上的Linux機器程式碼來監視Linux系統,而轉換為Windows系統上的Windows機器程式碼來監視Windows系統。這樣,Java就實現了“一次寫,到處跑”的偉大願景。
在Java虛擬機器誕生之前,為了支援在不同系統上執行的軟體,我們必須在多個平臺上編寫對應於特定系統的多個程式碼。但是Java虛擬機器出現後,只需要根據具體的規範進行編譯和編寫。編譯器編譯位元組碼檔案之後,虛擬機器會將幫助您生成相應的Windows程式碼和MacCode位元組碼。基本上,最終將生成兩個機器程式碼,Windows Code和MacCode,但是對於開發人員來說,他們只需要編寫一次程式碼。Java虛擬機器幫助開發人員進行重複性的工作,這使得開發更加高效。
許多初學者對Java虛擬機器有誤解,他們會覺得Java虛擬機器只能執行Java程式碼。但事實上,Java虛擬機器執行位元組碼檔案。換句話說,如果在PHP中編寫一段程式碼,並使用特定的編譯器生成符合位元組碼規範的位元組碼檔案,Java虛擬機器也可以執行。
因此,雖然Java虛擬機器的名稱是Java虛擬機器,但是Java虛擬機器與Java語言沒有直接關係。它只根據Java虛擬機器規範讀取類檔案,根據規則解析和執行位元組碼指令,僅此而已。
如果你足夠健壯,你可以編寫一個編譯器,將PHP語言程式碼編譯成符合Java虛擬機器規範的位元組碼檔案,然後Java虛擬機器也可以被執行。
確切地說,Java虛擬機器繫結到位元組碼檔案(類檔案)。
最後,讓我們回顧一下什麼是虛擬機器。事實上,Java虛擬機器是位元組碼翻譯器,它將位元組碼檔案轉換成每個系統的相應機器程式碼,以確保位元組碼檔案可以在每個系統中正確執行。