Java 不僅僅是一門程式設計語言,還是一個由一系列計算機軟體和規範組成的技術體系。
Java 的廣告詞為 "一次編寫,到處運作",之是以能夠做到"跨平台",是因為每個平台上不同的虛拟機屏蔽了硬體的差異,而 Java 程式則是運作在虛拟機之上的。
本文簡要介紹 Java 技術體系及 Java 虛拟機(Java Virtual Machine, JVM)的相關發展曆程,後文再進一步分析 Java 虛拟機的詳細内容。
PS: 本文及接下來的 JVM 筆記内容主要來自周志明《深入了解 Java 虛拟機(第3版)》。
廣義上講,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 技術體系包含的内容如下:

"Java 虛拟機" 隻是一個概念,它的實作産品衆多,下面簡要介紹其發展曆程。
Class VM (JDK 1.0)
世界上第一款商用 Java 虛拟機
純解釋器方式執行 Java 代碼
對象查找基于句柄
Exact VM (JDK 1.2)
準确式記憶體管理:虛拟機可以知道記憶體中某個位置的資料具體類型
Sun/OracleJDK 和 OpenJDK 中預設虛拟機
目前使用範圍最廣的 Java 虛拟機
由于 HotSpot 虛拟機是目前使用最廣泛的,而且是目前 OracleJDK 和 OpenJDK 的預設虛拟機,後文的内容分析主要是針對該虛拟機。
終端執行 java -version 指令如下(不同機器會有所不同,此處僅供參考):
這裡的 HotSpot(TM) 64-Bit Server VM 指的就是 HotSpot 虛拟機。
Java ME 虛拟機
這兩個虛拟機曾與 HotSpot 虛拟機并稱"三大商業 Java 虛拟機"。
JRockit
專注于服務端應用
不含解釋器,全部代碼都由即時編譯器編譯後執行
J9 VM
職責分離與子產品化優于 HotSpot VM
與特定硬體平台綁定、軟硬體配合的專有虛拟機
這兩者是 "虛拟機",而非 "Java 虛拟機"。
Harmony VM
未通過 TCK 認證
未大規模商用
Dalvik VM
未遵循《Java 虛拟機規範》
不能直接執行 Java 的 Class 檔案
曾經是 Windows 系統下性能最好的 Java 虛拟機
KVM:曾在手機平台上得到廣泛應用
Java Card VM
……
其他還有很多各種各樣的虛拟機,不再一一列舉。值得注意的是一個比較新的 Java 虛拟機: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 很有可能"上位"。
本文主要介紹了 Java 技術體系和 Java 虛拟機的發展曆程,該部分内容了解即可,後文再分析虛拟機的主要内容。
為便于回顧和總結,這裡将上述内容整理成了思維導圖:
PS: 本文首發于微信公衆号【WriteOnRead】。