JVM 介紹
1. 前言
本節(jié)內容主要是介紹 JVM 的定義、意義以及虛擬機的發(fā)展歷程,是本套課程的基礎知識部分,也是我們初次握手JVM 的章節(jié)。本節(jié)主要知識點如下:
-
了解 JVM 的定義,這是我們了解 JVM 概念的基礎,為本節(jié)的重點之一;
-
了解 JVM 存在的價值及意義,從使用層面了解 JVM 存在的意義,也是本節(jié)課程的重點內容;
-
了解 JVM 整體結構,該結構圖是從宏觀層面,介紹的虛擬機的整體結構模塊,后續(xù)會對每個模塊進行細致的介紹與講解,此處可視作了解內容,為后續(xù)內容的學習奠定基礎;
-
了解如何查看自己所使用的 JVM 版本,安裝完成 JDK 的學習者,都可以進行查看;
-
了解 JVM ,JRE 和 JDK 三者直接的區(qū)別,這是學習 JVM 前需要掌握的基礎知識。
本節(jié)內容是我們初次了解 JVM,從概念的角度去了解 JVM,為我們后續(xù)章節(jié)內容的學習打下了良好的基礎。
2. JVM 定義
定義: JVM (Java Virtual Machine 簡稱 JVM),亦可稱之為 Java 虛擬機。它是運行所有 Java 程序的抽象計算機,是 Java 語言的運行環(huán)境,它是 Java 最具吸引力的特性之一。
虛擬機:從字面意義上來理解,虛擬機是一個虛擬化出來的計算機。
舉個例子:我們經(jīng)常在 Windows 操作系統(tǒng)上安裝 Linux 的虛擬機,然后在 Linux 虛擬機上進行 Shell 腳本的編寫練習,那么從這個角度上來說, Linux 虛擬機就類似于 JVM ,不同的是 Linux 虛擬機支撐了 Shell 腳本的運行環(huán)境,而 JVM 支撐了 Java 語言的運行。
JVM 是一種抽象化的計算機,通過在實際的計算機上仿真模擬各種計算機功能來實現(xiàn)的。Java 虛擬機有自己完善的硬體架構,如處理器、堆棧、寄存器等,還具有相應的指令系統(tǒng)。Java 虛擬機屏蔽了與具體操作系統(tǒng)平臺相關的信息,使得 Java 程序只需生成在 Java 虛擬機上運行的目標代碼(字節(jié)碼),就可以在多種平臺上不加修改地運行。
3. JVM 的作用
JVM 是 Java 語言的一大關鍵亮點,對于 JVM 的作用,我們這里介紹兩個主要的作用,來體現(xiàn) JVM 的價值所在。
-
跨平臺性:Java 語言之所以有跨平臺的優(yōu)點,完全是 JVM 的功勞,跨平臺性是 JVM 存在的最大的亮點。
以上一個知識點部分所舉出例子來說,Windows 操作系統(tǒng)安裝上 JVM 之后,可以支持 Java 程序的運行; Linux 操作系統(tǒng)安裝上 JVM 之后,可以支持 Java 程序的運行;同理,Unix 操作系統(tǒng)等等所有我們熟悉的操作系統(tǒng),安裝上 JVM 之后,都可以支持 Java 程序的運行。
這大大提升了 Java 語言的平臺靈活性,能夠在眾多語言爭鳴的時代,脫穎而出。
-
優(yōu)秀的垃圾回收機制: Java 語言的誕生,極大的降低了軟件開發(fā)人員的學習難度,除了 Java 面向對象編程的特性能夠降低學習難度以外,還有一個比較重要的點,就是在進行 Java 編程的時候,可以更少的去考慮垃圾回收機制。
學習過 C 語言的技術人員都能夠體會這一點,因為 C 語言編程過程中,要通過代碼手動實現(xiàn)內存垃圾的回收與空間釋放,這提升了編程的難度,因為考慮內存空間釋放,更多的會涉及到底層的知識,這是非常高的一個門檻。從 JVM 的角度來說,JVM 擁有自己的垃圾回收機制,為開發(fā)人員分擔了部分工作。
Tips:JVM 在 Java 語言中占據(jù)了非常重要的地位,學習 JVM 是 Java 技術人員必須要做的事情,目前企業(yè)對于 Java 從業(yè)者對 JVM 的掌握程度要求非常高,是重點學習內容。
4. 查看自己的 JVM
我們知道,如果需要運行 Java 程序,必須要安裝 JDK,這說明 JDK 中就包含了支持 Java 語言運行的JVM ,我們來看下如何查看本機的 JVM 信息。
無論是 Windows 操作系統(tǒng)還是 Linux 操作系統(tǒng),正確安裝 JDK 并且配置好環(huán)境變量后,在命令行輸入如下命令進行查看:
java -version
以本人的機器為例,可以看到如下的執(zhí)行結果:
C:\Users\Wayne.WangTJ>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)
我們仔細看下最后一句執(zhí)行結果,Java HotSpot? 64-Bit Server VM (build 25.191-b12, mixed mode),這就是我的電腦中 Jvm 虛擬機操作系統(tǒng)的版本。 當然了,安裝不同的版本,結果是有所區(qū)別的。
5. JVM,JRE 和 JDK 聯(lián)系
三者的定義:我們先來明確下三者的定義,然后說明三者的聯(lián)系與區(qū)別。
- JDK:全稱 java development kit ,開發(fā)工具包,面向我們的開發(fā)者,為開發(fā)者提供開發(fā)類庫,他是 java 的核心。JDK 包含了JRE,一堆工具類(javac、java)以及 Java 的基礎類庫(Object,string);
- JRE:全稱 java runtime environment。包含了JVM 實現(xiàn)和需要的類庫。JRE 是一個運行環(huán)境,并非開發(fā)工具;
- JVM:它是一個虛構出來的計算機,是通過在實際的計算機上仿真模擬各種計算機功能來實現(xiàn)的。JVM 有自己完善的硬件架構,如處理器、堆棧、寄存器等,還具有相應的指令系統(tǒng)。Java 語言最重要的特點就是跨平臺運行。使用 JVM 就是為了實現(xiàn)跨平臺。
如下圖所示,我們可以看到 JDK 包含 JRE,JRE 包含 JVM,我們繼續(xù)來看下邊的講解,徹底了解三者之間的聯(lián)系與區(qū)別。
三者的區(qū)別:
- JDK 和 JRE 的區(qū)別: JDK 是開發(fā)工具包,包含了JRE;JRE 是運行環(huán)境,不提供開發(fā)工具包。
- JRE 和 JVM 的區(qū)別: JRE 包含了JVM,JRE=JVM+lib。JRE 為 class 文件提供了運行的環(huán)境,但是需要 JVM 進行 class 文件的翻譯,JVM 將翻譯好的文件傳給 os 系統(tǒng)或者是 CPU 映射指令集,才能夠最終完成運行。
三者的聯(lián)系:三者互相配合不可分割。
JVM 不能夠單獨的搞定 class 文件,解釋 class 的時候,JVM (安裝路徑\Java\jre1.8.0_144\bin)需要調用我們所需要的類庫(安裝路徑\Java\jre1.8.0_144\lib)?;\統(tǒng)的來說,JVM + lib = JRE。而 JDK 是基于 JRE 基礎之上進行的。
總體來說,我們利用 JDK 開發(fā)了屬于我們自己的程序,通過 JDK 的 javac 工具包進行了編譯,將 Java 文件編譯成為了 class 文件(字節(jié)碼文件),在 JRE 上運行這些文件的時候,JVM 進行了這些文件(字節(jié)碼文件)的翻譯,翻譯給操作系統(tǒng),映射到 CPU 指令集或者是操作系統(tǒng)調用,最終完成了我們的代碼程序的順利運行。
6. 小結
本節(jié)課程主要是對 JVM 的定義以及作用進行一個簡單的介紹,通過對 JVM 的整體結構進行描述,使我們了解了 JVM 的基本情況,為后續(xù)的學習奠定良好的基礎。