資料內(nèi)容:
JVM
Java 虛擬機(jī)(JVM)是運(yùn)? Java 字節(jié)碼的虛擬機(jī)。JVM 有針對(duì)不同系統(tǒng)的特定實(shí)現(xiàn)(Windows, Linux,macOS),?的是使?相同的字節(jié)碼,它們都會(huì)給出相同的結(jié)果。字節(jié)碼和不同系統(tǒng)的 JVM 實(shí)現(xiàn)是 Java 語(yǔ)?“?次編譯,隨處可以運(yùn)?”的關(guān)鍵所在。
JVM 并不是只有?種!只要滿? JVM 規(guī)范,每個(gè)公司、組織或者個(gè)?都可以開發(fā)??的專屬 JVM。 也就是說我們平時(shí)接觸到的 HotSpot VM 僅僅是是 JVM 規(guī)范的?種實(shí)現(xiàn)?已。
除了我們平時(shí)最常?的 HotSpot VM 外,還有 J9 VM、Zing VM、JRockit VM 等 JVM 。維基百科上 就有常? JVM 的對(duì)?:Comparison of Java virtual machines ,感興趣的可以去看看。并且,你可 以在 Java SE Specifications 上找到各個(gè)版本的 JDK 對(duì)應(yīng)的 JVM 規(guī)范
JDK 和 JRE
JDK 是 Java Development Kit 縮寫,它是功能?全的 Java SDK。它擁有 JRE 所擁有的?切,還有 編譯器(javac)和?具(如 javadoc 和 jdb)。它能夠創(chuàng)建和編譯程序。
JRE 是 Java 運(yùn)?時(shí)環(huán)境。它是運(yùn)?已編譯 Java 程序所需的所有內(nèi)容的集合,包括 Java 虛擬機(jī) (JVM),Java 類庫(kù),java 命令和其他的?些基礎(chǔ)構(gòu)件。但是,它不能?于創(chuàng)建新程序。
如果你只是為了運(yùn)??下 Java 程序的話,那么你只需要安裝 JRE 就可以了。如果你需要進(jìn)??些 Java 編程??的?作,那么你就需要安裝 JDK 了。但是,這不是絕對(duì)的。有時(shí),即使您不打算在計(jì) 算機(jī)上進(jìn)?任何 Java 開發(fā),仍然需要安裝 JDK。例如,如果要使? JSP 部署 Web 應(yīng)?程序,那么 從技術(shù)上講,您只是在應(yīng)?程序服務(wù)器中運(yùn)? Java 程序。那你為什么需要 JDK 呢?因?yàn)閼?yīng)?程序 服務(wù)器會(huì)將 JSP 轉(zhuǎn)換為 Java servlet,并且需要使? JDK 來(lái)編譯 servlet
什么是字節(jié)碼?采?字節(jié)碼的好處是什么?
在 Java 中,JVM 可以理解的代碼就叫做字節(jié)碼(即擴(kuò)展名為 .class 的?件),它不?向任何特定 的處理器,只?向虛擬機(jī)。Java 語(yǔ)?通過字節(jié)碼的?式,在?定程度上解決了傳統(tǒng)解釋型語(yǔ)?執(zhí)? 效率低的問題,同時(shí)?保留了解釋型語(yǔ)?可移植的特點(diǎn)。所以, Java 程序運(yùn)?時(shí)相對(duì)來(lái)說還是?效 的(不過,和 C++,Rust,Go 等語(yǔ)?還是有?定差距的),?且,由于字節(jié)碼并不針對(duì)?種特定的 機(jī)器,因此,Java 程序?須重新編譯便可在多種不同操作系統(tǒng)的計(jì)算機(jī)上運(yùn)?