更新時間:2020-09-30 15:39:51 來源:動力節(jié)點 瀏覽2229次
JVM是我們學習Java接觸最多的名詞之一,那么JVM到底是什么呢?許多小伙伴對此都是一知半解,沒有從根本上弄懂JVM是什么。
想知道jvm是什么?那我們先來看看JVM的定義:JVM是Java Virtual Machine(Java虛擬機)的縮寫,JVM是一種用于計算設備的規(guī)范,它是一個虛構出來的計算機,是通過在實際的計算機上仿真模擬各種計算機功能來實現(xiàn)的。
我們都知道在 Windows 系統(tǒng)上一個軟件包裝包是 exe 后綴的,而這個軟件包在蘋果的 Mac OSX 系統(tǒng)上是無法安裝的。類似地,Mac OSX 系統(tǒng)上軟件安裝包則是 dmg 后綴,同樣無法在 Windows 系統(tǒng)上安裝。
為什么不同系統(tǒng)上的軟件無法安裝,這是因為操作系統(tǒng)底層的實現(xiàn)是不一樣的。對于 Windows 系統(tǒng)來說,exe 后綴的軟件代碼最終編譯成 Windows 系統(tǒng)能識別的機器碼。而 Mac OSX 系統(tǒng)來說,dmg 后綴的軟件代碼最終編譯成 Mac OSX 系統(tǒng)能識別的代碼。
系統(tǒng)軟件無法通用是一個常見的問題。但使用過 Java 的同學都知道,Java 代碼可以在服務端(Linux 系統(tǒng))運行,也可以在 Windows 系統(tǒng)運行,但我們并沒有生成多份不同的代碼。所以 Java 語言是如何做到的呢?
與其他語言不同,Java 語言并不直接將代碼編譯成與系統(tǒng)有關的機器碼,而是編譯成一種特定的語言規(guī)范,這種語言規(guī)范我們稱之為字節(jié)碼。無論 Java 程序要在 Windows 系統(tǒng),還是 Mac OSX 系統(tǒng),抑或是 Linux 系統(tǒng),它首先都得編譯成字節(jié)碼文件,之后才能運行。
但即使編譯成字節(jié)碼文件了,各個系統(tǒng)還是無法明白字節(jié)碼文件的內(nèi)容,這時候就需要 Java 虛擬機的幫助了。Java 虛擬機會解析字節(jié)碼文件的內(nèi)容,并將其翻譯為各操作系統(tǒng)能理解的機器碼。
簡單地說,對于同樣一份 Java 源碼文件,我們編譯成字節(jié)碼之后,無論是 Linux 系統(tǒng)還是 Windows 系統(tǒng)都不認識。這時候 Java 虛擬機就是一個翻譯官,在 Linux 系統(tǒng)上翻譯成 Linux 機器碼給 Linux 系統(tǒng)聽,在 Windows 系統(tǒng)上翻譯成 Windows 機器碼給 Windows 系統(tǒng)聽。這樣一來,Java 就實現(xiàn)了「Write Once,Run Anywhere」的偉大愿景了。
在 Java 虛擬機還沒出現(xiàn)之前,為了支持軟件在不同系統(tǒng)上運行,我們必須在多個平臺寫多份代碼,分別對應特定的系統(tǒng)。但 Java 虛擬機出現(xiàn)之后,你只需要按照特定規(guī)范編譯書寫,編譯器編譯成字節(jié)碼文件后,虛擬機會幫你將字節(jié)碼生成對應的 Windows Code 和 Mac Code。本質(zhì)上最終還是會生成 Windows Code 和 Mac Code 兩份機器代碼,但對于開發(fā)人員來說,卻只需要寫一次代碼了。Java 虛擬機幫開發(fā)人員承擔了重復的工作,讓開發(fā)效率更高了。
很多初學者關于 Java 虛擬機有一個誤區(qū),他們會覺得 Java 虛擬機只能運行 Java 代碼。但實際上 Java 虛擬機運行的是字節(jié)碼文件。換句話說,如果你用 php 語言寫一段代碼,并自己用特定編譯器能生成符合字節(jié)碼規(guī)范的字節(jié)碼文件,那么 Java 虛擬機也是可以運行的。
所以雖然名字是 Java 虛擬機,但 Java 虛擬機與 Java 語言沒有直接關系,它只按照 Java 虛擬機規(guī)范去讀取 Class 文件,并按照規(guī)定去解析、執(zhí)行字節(jié)碼指令,僅此而已。
當然如果你夠優(yōu)秀,你完全可以寫一個編譯器,將 PHP 語言代碼編譯成符合 Java 虛擬機規(guī)范的字節(jié)碼文件,那么 Java 虛擬機也是可以執(zhí)行的。準確地說,Java 虛擬機與字節(jié)碼文件(Class文件)綁定。
看完了本文,我們或多或少對JVM應該有了自己的認知,到底jvm是什么?其實 Java 虛擬機就是一個字節(jié)碼翻譯器,它將字節(jié)碼文件翻譯成各個系統(tǒng)對應的機器碼,確保字節(jié)碼文件能在各個系統(tǒng)正確運行,僅此而已。對于JVM更加深入的講解在本站的Java基礎視頻教程中有著完美的體系,小伙伴們還不趕快行動,下載視頻教程,開始學習Java基礎知識。