1.前言
Java 不僅僅是一門編程語言,還是一個由一系列計算機軟體和規範組成的技術體系。
Java 的廣告詞為 “一次編寫,到處運行”,之所以能夠做到”跨平台”,是因為每個平台上不同的虛擬機屏蔽了硬體的差異,而 Java 程序則是運行在虛擬機之上的。
本文簡要介紹 Java 技術體系及 Java 虛擬機(Java Virtual Machine, JVM)的相關發展歷程,後文再進一步分析 Java 虛擬機的詳細內容。
PS: 本文及接下來的 JVM 筆記內容主要來自周志明《深入理解 Java 虛擬機(第3版)》。
2. Java技術體系
廣義上講,Kotlin、Groovy、JRuby 等運行於 Java 虛擬機上的編程語言及其相關程序都屬於 Java 技術體系。
而從傳統意義上來看,JCP 官方定義的 Java 技術體系主要包括:
- Java 程序設計語言
- 各種硬體平台上的 Java 虛擬機
- Class 文件格式
- Java 類庫 API
- 商業機構和開源社區的第三方 Java 類庫
其中 Java 程序設計語言、Java 虛擬機、Java 類庫三部分統稱為 JDK(Java Development Kit),JDK 是支持 Java 程序開發的最小環境。
Java 類庫 API 中的 Java SE API 子集和 Java 虛擬機統稱為 JRE(Java Runtime Environment),JRE 是支持 Java 程序運行的標準環境。
PS: JCP 全稱 Java Community Process,即 Java 社區,由業界多家技術巨頭組成的社區,用於定義和發展 Java 的技術規範。
Java 技術體系包含的內容如下:

3. JVM家族
“Java 虛擬機” 只是一個概念,它的實現產品眾多,下面簡要介紹其發展歷程。
Sun Classic/Exact VM
- Class VM (JDK 1.0)
- 世界上第一款商用 Java 虛擬機
- 純解釋器方式執行 Java 代碼
- 對象查找基於句柄
- Exact VM (JDK 1.2)
- 準確式內存管理:虛擬機可以知道內存中某個位置的數據具體類型
HotSpot VM
- Sun/OracleJDK 和 OpenJDK 中默認虛擬機
- 目前使用範圍最廣的 Java 虛擬機
由於 HotSpot 虛擬機是目前使用最廣泛的,而且是目前 OracleJDK 和 OpenJDK 的默認虛擬機,後文的內容分析主要是針對該虛擬機。
終端執行 java -version 命令如下(不同機器會有所不同,此處僅供參考):
$ java -version
java version "1.8.0_191"
Java(TM) SE Runtime Environment (build 1.8.0_191-b12)
Java HotSpot(TM) 64-Bit Server VM (build 25.191-b12, mixed mode)這裡的 HotSpot(TM) 64-Bit Server VM 指的就是 HotSpot 虛擬機。
Mobile/Embedded VM
- Java ME 虛擬機
BEA JRockit/IBM J9 VM
這兩個虛擬機曾與 HotSpot 虛擬機並稱”三大商業 Java 虛擬機”。
- JRockit
- 專註於服務端應用
- 不含解釋器,全部代碼都由即時編譯器編譯後執行
- J9 VM
- 職責分離與模塊化優於 HotSpot VM
BEA Liquid VM/Azul VM
- 與特定硬體平台綁定、軟硬體配合的專有虛擬機
Apache Harmony/Google Android Dalvik VM
這兩者是 “虛擬機”,而非 “Java 虛擬機”。
- Harmony VM
- 未通過 TCK 認證
- 未大規模商用
- Dalvik VM
- 未遵循《Java 虛擬機規範》
- 不能直接執行 Java 的 Class 文件
Microsoft JVM
- 曾經是 Windows 系統下性能最好的 Java 虛擬機
其他
- KVM:曾在手機平台上得到廣泛應用
- Java Card VM
- ……
其他還有很多各種各樣的虛擬機,不再一一列舉。值得注意的是一個比較新的 Java 虛擬機:Graal VM。
Graal VM
2018 年 4 月,Oracle Labs 公開的黑科技:Graal VM。
Graal VM 被官方稱為”Universal VM”和”Polyglot VM”,它是在 HotSpot 虛擬機基礎上增強而成的跨語言全棧虛擬機。可作為”任何語言”的運行平台,包括:
- Java、Scala、Groovy、Kotlin 等基於 Java 虛擬機之上的語言
- C、C++、Rust 等基於 LLVM 的語言,同時支持 JavaScript、Ruby、Python 等
如圖所示:

而且自 JDK 10 起,HotSpot 中又加入了一個全新的即時編譯器:Graal 編譯器。
如若將來某一天 HotSpot 虛擬機真的被替換,Graal VM 很有可能”上位”。
4. 小結
本文主要介紹了 Java 技術體系和 Java 虛擬機的發展歷程,該部分內容了解即可,後文再分析虛擬機的主要內容。
為便於回顧和總結,這裡將上述內容整理成了思維導圖:

原創文章,作者:投稿專員,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/274830.html
微信掃一掃
支付寶掃一掃