【JVM進階之路】一:Java虛擬機器概覽

三分惡發表於2021-03-17

1、Java簡史

Java語言是一門通用的、物件導向的、支援併發的程式語言。全球從事Java相關開發的人員已經數以百萬計。

Java技術體系

從1995年“Java”正式出現以來,Java已經經歷了二十幾年的發展。

img

Java語言之所以能廣受歡迎,其中的原因之一是Java是一門可以跨平臺的語言。

而跨平臺的特性就是通過Java虛擬機器(JVM)是實現的。

2、JVM簡介

JVM是整個Java平臺的基石。

JVM可以看作抽象的計算機。編譯器將Java檔案編譯為Java位元組碼檔案(.class),接下來JVM對位元組碼檔案進行解釋,翻譯成特定底層平臺匹配的機器指令並執行。

image-20210317182523313

JVM和Java語言沒有必然的聯絡,它只與class檔案格式關聯。也就是任何語言,只要能編譯成符合規範的位元組碼檔案,都是能被Jvm執行的。也就是說JVM是跨語言的平臺

image-20210317183831511

3、Java虛擬機器規範

我們還要認識到,Java虛擬機器是一種規範,它指定了Java虛擬機器結構、class檔案格式、類載入過程等。我們平時所提到的Java虛擬機器一般指的是一種具體的Java虛擬機器的實現,例如最知名的hotspot,遵循Java虛擬機器規範,甚至可以自己實現Java虛擬機器。

4、Java虛擬機器常見實現

4.1、HotSpot VM

HotSpot虛擬機器是現在應用最廣泛的虛擬機器,它是Sun/OracleJDK和OpenJDK中的預設Java虛擬機器。

但是這款虛擬機器在最初並非由Sun公司所開發,而是由一家名為“Longview Technologies”的小公司設計;甚至這個虛擬機器最初並非是為Java語言而研發的,它來源於Strongtalk虛擬機器。

Oracle收購Sun以後,建立了HotRockit專案來把原來BEA JRockit中的優秀特性融合到HotSpot之中。到了2014年的JDK 8時期,裡面的HotSpot就已是兩者融合的結果,HotSpot在這個過程 裡移除掉永久代,吸收了JRockit的Java Mission Control監控工具等功能。 得益於Sun/OracleJDK在Java應用中的統治地位,HotSpot理所當然地成為全世界使用最廣泛的Java 虛擬機器,是虛擬機器家族中毫無爭議的“武林盟主”。

4.2、BEA JRockit/IBM J9 VM

歷史上除了Sun/Oracle公司以外,也有其他組織、公司開發過虛擬機器的實現。除了HotSpot之外,BEA JRockit和IBM J9 VM曾經與HotSpot並稱“三大商業Java虛擬機器”,它們分別是BEA System公司和 IBM公司開發。

除BEA和IBM公司外,其他一些大公司也號稱有自己的專屬JDK和虛擬機器,但是它們要麼是通過從Sun/Oracle公司購買版權的方式獲得的(如HP、SAP等),要麼是基於OpenJDK專案改進而來的 (如阿里巴巴、Twitter等),都並非自己獨立開發。

5、JDK&JRE&JVM

JDK&JRE&JVM三者常常被用來比較。

  • JDK(Java Development Kit Java 開發工具包),JDK 是提供給 Java 開發人員使用的,其中包含了 Java 的開發工具,也包括了 JRE。其中的開發工具包括編譯工具(javac.exe) 打包工具(jar.exe)等。

  • JRE(Java Runtime Environment Java 執行環境) 是 JDK 的子集,也就是包括 JRE 所有內容,以及開發應用程式所需的編譯器和偵錯程式等工具。JRE 提供了庫、Java 虛擬機器(JVM)和其他元件,用於執行 Java 程式語言、小程式、應用程式。

  • JVM(Java Virtual Machine Java 虛擬機器),JVM 可以理解為是一個虛擬出來的計算機,具備著計算機的基本運算方式,它主要負責把 Java 程式生成的位元組碼檔案。

三者關係簡圖如下:

image-20210317190106952



參考:

【1】:周志朋編著《深入理解Java虛擬機器:JVM高階特性與最佳實踐》

【2】:周志朋等翻譯《Java虛擬機器規範》

【3】:封亞飛編著《揭祕Java虛擬機器 JVM設計原理與實現》

【4】:【死磕JVM】JVM快速入門之前戲篇

相關文章