JVM体系结构:JVM中的执行引擎
各位讀者好! 在JVM系列的上一篇文章中,開發(fā)人員了解了虛擬機(jī)的ClassLoader和Runtime Data Areas組件。 本教程將幫助開發(fā)人員正確理解JVM中的執(zhí)行引擎 。
1.簡介
在繼續(xù)之前,讓我們看一下Java虛擬機(jī)及其基本特征。
1.1什么是Java虛擬機(jī)(JVM)?
Java虛擬機(jī)(JVM)是??駐留在您的計算機(jī)上的抽象虛擬機(jī),并為Java字節(jié)碼提供了運行時環(huán)境以供執(zhí)行。 JVM可用于許多硬件和軟件平臺,但是很少有Java開發(fā)人員知道Java運行時環(huán)境 (JRE)是Java虛擬機(jī) (JVM)的實現(xiàn)。 JVM分析字節(jié)碼,對其進(jìn)行解釋,然后執(zhí)行相同的字節(jié)碼以顯示輸出。
JVM的基本功能是執(zhí)行已編譯的.class文件(即字節(jié)碼)并生成輸出。 請注意 ,每個操作系統(tǒng)都有一個不同的JVM,但是在所有操作系統(tǒng)上生成的字節(jié)碼輸出都是相同的。 這意味著在Windows操作系統(tǒng)上生成的字節(jié)碼也可以在Linux操作系統(tǒng)上運行,反之亦然,從而使Java成為獨立于平臺的語言。
圖1:Java虛擬機(jī)概述
1.1.1 JVM做什么?
Java虛擬機(jī)執(zhí)行以下操作:
- 加載所需的.class和jar文件
- 分配參考并驗證代碼
- 執(zhí)行代碼
- 為Java字節(jié)碼提供運行時環(huán)境
1.1.2 JVM內(nèi)部架構(gòu)
下圖顯示了符合JVM規(guī)范的Java虛擬機(jī)的關(guān)鍵內(nèi)部組件。
圖2:Java虛擬機(jī)架構(gòu)
下面分別說明圖2所示的執(zhí)行引擎組件。
1.2 JVM中的執(zhí)行引擎
該組件執(zhí)行通過類加載器分配給運行時數(shù)據(jù)區(qū)域的字節(jié)碼。 該字節(jié)碼作為指令讀取,每個字節(jié)碼指令由一個1字節(jié)的OpCode和一個加法操作數(shù)組成。 請注意 ,Java字節(jié)碼是以人類可讀的形式編寫的,因此執(zhí)行引擎必須將字節(jié)碼更改為Java虛擬機(jī)中的機(jī)器可以輕松執(zhí)行的語言。 執(zhí)行引擎具有三個主要子組件,即
- 解釋器 :此組件讀取字節(jié)碼指令并以順序方式執(zhí)行它們。 該組件通過接受文件名參數(shù)從命令行運行應(yīng)用程序。 可以使用以下原型命令: java <_compiled_file_name_without_extension_>
請記住 ,虛擬機(jī)解釋器加載的已編譯類(即.class文件)必須包含采用以下形式的main()方法。
public static void main(String[] args) { // Sample code here} - JIT(Just In Time)編譯器 :該組件抵消了解釋器執(zhí)行速度慢的缺點,并提高了性能。 JIT編譯器同時編譯字節(jié)碼的相似部分,從而減少了編譯所需的總時間。 該組件中的編譯器是指將JVM指令集轉(zhuǎn)換為特定于OS的指令集的轉(zhuǎn)換器。
- Oracle使用一種稱為Hotspot Compiler的編譯器 ,該編譯器通過分析來搜索需要以最高優(yōu)先級進(jìn)行編譯的熱點,然后將該熱點編譯為本機(jī)代碼。
- 垃圾收集 :此組件是執(zhí)行引擎的一部分,該引擎通過收集和刪除未引用的對象來釋放內(nèi)存
圖3:JVM中的執(zhí)行引擎
1.3如何編譯和執(zhí)行Java類?
本節(jié)將演示Java類的編譯和執(zhí)行 。 讓我們借助示例代碼片段來了解此過程。
1.3.1創(chuàng)建Java文件
打開操作系統(tǒng)命令提示符,我們將使用“記事本”創(chuàng)建一個簡單的Java類。 可以使用以下Java命令。
> notepad _sample_file_name_with_extension_該命令提供以下輸出。
圖4:使用記事本創(chuàng)建Java文件
1.3.2編寫示例Java代碼
如圖4所示,該命令將打開一個記事本 ,開發(fā)人員可以將示例代碼添加到顯示虛擬輸出的Welcome.java文件中。 示例代碼如圖5所示, 成功執(zhí)行后將顯示問候消息 。
圖5:添加示例代碼
1.3.3編譯Java類
將代碼保存在Welcome.java文件中后,開發(fā)人員將需要對其進(jìn)行編譯 。 該編譯將生成Welcome.class文件,該文件又將生成一個.class文件。 要編譯該文件,可以使用以下Java命令。
> javac _Java_file_name_with_extension_該命令提供以下輸出。
圖6:編譯文件
1.3.4執(zhí)行Java類
現(xiàn)在,開發(fā)人員將需要執(zhí)行生成的Welcome.class文件以顯示輸出。 要執(zhí)行該文件,可以使用以下Java命令。
> java _Compiled_file_name_with_extension_該命令提供以下輸出。
圖7:執(zhí)行文件
1.4 JVM與JRE與JDK
在繼續(xù)完成本教程之前,讓我們看一下Java編程的三個重要關(guān)鍵字。 許多開發(fā)人員無法獲得兩者之間的差異。
- Java虛擬機(jī)(JVM) :JVM是一種虛擬機(jī),為執(zhí)行Java字節(jié)碼提供了運行時環(huán)境
- Java運行時環(huán)境(JRE) :JRE是一個在其中運行JVM的環(huán)境,并具有Java虛擬機(jī)在執(zhí)行時使用的類庫和其他文件。 換句話說,JRE = Java虛擬機(jī)(JVM)+運行該應(yīng)用程序的庫
- Java開發(fā)工具包(JDK) :JDK是JRE的父集,具有JRE以及開發(fā)工具(如編譯器,調(diào)試器等)所包含的所有內(nèi)容。換句話說,JDK = Java運行時環(huán)境(JRE)+開發(fā)工具
這是JVM,JRE和JDK的圖形表示。
圖8:JVM,JRE和JDK表示形式
這就是這篇文章的全部內(nèi)容。 學(xué)習(xí)愉快!
2.結(jié)論
在本教程中,開發(fā)人員對JVM中的執(zhí)行引擎組件進(jìn)行了概述。 您可以在“ 下載”部分中下載示例代碼。
3.下載源代碼
這是Java虛擬機(jī)(JVM)中執(zhí)行引擎的概述教程。
下載您可以在此處下載本教程的源代碼: Compilation_and_Execution
翻譯自: https://www.javacodegeeks.com/2018/04/jvm-architecture-execution-engine-in-jvm.html
總結(jié)
以上是生活随笔為你收集整理的JVM体系结构:JVM中的执行引擎的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 拟录取和备录取(拟录取备案)
- 下一篇: 带有JUnit 5支持的Ant 1.10