日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

JVM体系结构:JVM中的执行引擎

發(fā)布時間:2023/12/3 编程问答 42 豆豆
生活随笔 收集整理的這篇文章主要介紹了 JVM体系结构:JVM中的执行引擎 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

各位讀者好! 在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)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。