JVM 全稱Java Virtual Machine,也就是我們耳熟能詳的Java 虛擬機器。它能識別.class 字尾的檔案,並且能夠解析它的指令,最終呼叫作業系統上的函式,完成我們想要的操作。
Java執行流程
當我們編寫完程式之後檔案就是.Java
檔案通過Javac指令編譯之後就是.class
檔案,之後就是由JVM將類載入到方法區中,執行引擎執行這些位元組碼。
過程如下:Java 檔案->編譯器>位元組碼->JVM->機器碼
。
JVM的跨平臺、跨語言性
-
跨平臺
Java官網提供了各個系統版本的JDK,我們根據系統下載對應版本的JDK就可以將我們寫的類執行在不同的作業系統上。
官網直達:https://www.oracle.com/java/technologies/javase/javase-jdk8-downloads.html
-
跨語言
因為JVM是通過識別位元組碼(.class檔案)的方式進行執行的,所以只要其他語言如果也可以編譯為位元組碼檔案則也可以在JVM上執行,例如:Groovy、Kotlin等等一些語言。所以JVM也是一定程度上奠定了Java強大的生態圈。
JVM相關實現
JVM規範的存在提供了一些JVM的具體的實現。
-
HotSpot
使用最多的Java虛擬機器,通過javac -version的命令可以看到。
-
Jrocket
原隸屬於BEA公司,號稱最快的JVM,後被Oracle所收購,與HotSpot所合併。
-
J9
IBM公司的JVM,主要用於自家產品上(IBM WebSphere 和IBM 的AIX 平臺)。
-
TaobaoVM
淘寶根據HotSpot為自身定製的JVM,目前阿里、天貓都在使用。
-
zing
屬於zual公司,很牛,但是很貴。它的垃圾回收速度非常快,之後它的垃圾回收演算法被HotSpot所吸收形成了現在的ZGC。
JVM 整體知識模組
從下圖中可以看到JVM的知識模組是比較多的,但是基本上都會與記憶體結構牽扯到一些關係,所以記憶體結構是非常重要的一塊知識點。