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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

JVM_05 执行引擎(Execution Engine)

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

總結(jié)寫在最前面:

一、 執(zhí)行引擎概述

①. 執(zhí)行引擎是Java虛擬機(jī)的核心組成部分之一

②. JVM的主要任務(wù)是負(fù)責(zé)裝載字節(jié)碼到其內(nèi)部,但字節(jié)碼并不能夠直接運(yùn)行在操作系統(tǒng)之上,因?yàn)樽止?jié)碼指令并非等價于本地機(jī)器指令,它內(nèi)部包含的僅僅只是一些能夠被JVM鎖識別的字節(jié)碼指令、符號表和其他輔助信息

③. 那么,如果想讓一個Java程序運(yùn)行起來、執(zhí)行引擎的任務(wù)就是將字節(jié)碼指令解釋/編譯為對應(yīng)平臺上的本地機(jī)器指令才可以。簡單來說,JVM中的執(zhí)行引擎充當(dāng)了將高級語言翻譯為機(jī)器語言的譯者

④. 執(zhí)行引擎的工作過程 (從外觀上來看,所有的Java虛擬機(jī)的執(zhí)行引擎輸入、輸出都是一致的:輸入的是字節(jié)碼二進(jìn)制流,處理過程是字節(jié)碼解析執(zhí)行的等效過程,輸出的是執(zhí)行結(jié)果)

  • 執(zhí)行引擎在執(zhí)行的過程中究竟需要執(zhí)行什么樣的字節(jié)碼指令完全依賴于PC寄存器
  • 每當(dāng)執(zhí)行完一項(xiàng)指令操作后,PC寄存器就會更新下一條需要被執(zhí)行的指令地址
  • 當(dāng)然方法在執(zhí)行的過程中,執(zhí)行引擎有可能會通過存儲在局部變量表中的對象引用準(zhǔn)確定位到存儲在Java堆區(qū)中的對象實(shí)例信息,以及通過對象頭中的元數(shù)據(jù)指針定位到目標(biāo)對象的類型信息。
  • 二、Java代碼編譯和執(zhí)行過程

    ①. 大部分的程序代碼轉(zhuǎn)換成物理機(jī)的目標(biāo)代碼或虛擬機(jī)能執(zhí)行的指令集之前,都需要經(jīng)過下面圖中的各個步驟:

    ②. 什么是解釋器( Interpreter),什么是JIT編譯器?掌握

  • 解釋器:當(dāng)Java虛擬機(jī)啟動時會根據(jù)預(yù)定義的規(guī)范對字節(jié)碼采用逐行解釋的方式執(zhí)行,將每條字節(jié)碼文件中的內(nèi)容“翻譯”為對應(yīng)平臺的本地機(jī)器指令執(zhí)行
  • JIT (Just In Time Compiler)編譯器(即時編譯器):就是虛擬機(jī)將源代碼直接編譯成和本地機(jī)器平臺相關(guān)的機(jī)器語言
  • ③. 為什么說Java是半編譯半解釋型語言? 如下圖要記住

  • JDK1.0時代,將Java語言定位為“解釋執(zhí)行”還是比較準(zhǔn)確的。再后來,Java也發(fā)展出可以直接生成本地代碼的編譯器
  • 現(xiàn)在JVM在執(zhí)行Java代碼的時候,通常都會將解釋執(zhí)行與編譯執(zhí)行二者結(jié)合起來進(jìn)行。
  • 三、機(jī)器碼、指令、匯編語言

    ①. 機(jī)器碼:各種用二進(jìn)制編碼方式表示的指令,叫做機(jī)器指令碼。開始,人們就用它采編寫程序,這就是機(jī)器語言(0 | 1 組成的)

  • 機(jī)器語言雖然能夠被計(jì)算機(jī)理解和接受,但和人們的語言差別太大,不易被人們理解和記憶,并且用它編程容易出差錯
  • 用它編寫的程序一經(jīng)輸入計(jì)算機(jī),CPU直接讀取運(yùn)行,因此和其他語言編的程序相比,執(zhí)行速度最快
  • 機(jī)器指令與CPU緊密相關(guān),所以不同種類的CPU所對應(yīng)的機(jī)器指令也就不同。
  • ②. 指令就是把機(jī)器碼中特定的0和1序列,簡化成對應(yīng)的指令(一般為英文簡寫,如mov,inc等),可讀性稍好
    (由于不同的硬件平臺,執(zhí)行同一個操作,對應(yīng)的機(jī)器碼可能不同,所以不同的硬件平臺的同一種指令(比如mov),對應(yīng)的機(jī)器碼也可能不同)

    ③. 指令集

  • 不同的硬件平臺,各自支持的指令,是有差別的。因此每個平臺所支持的指令,稱之為對應(yīng)平臺的指令集
  • 如常見的(x86指令集,對應(yīng)的是x86架構(gòu)的平臺 | ARM指令集,對應(yīng)的是ARM架構(gòu)的平臺 )
  • ④. 匯編語言

  • 在匯編語言中,用助記符(Mnemonics)代替機(jī)器指令的操作碼,用地址符號(Symbol)或標(biāo)號(Label)代替指令或操作數(shù)的地址
  • 在不同的硬件平臺,匯編語言對應(yīng)著不同的機(jī)器語言指令集,通過匯編過程轉(zhuǎn)換成機(jī)器指令(由于計(jì)算機(jī)只認(rèn)識指令碼,所以用匯編語言編寫的程序還必須翻譯成機(jī)器指令碼,計(jì)算機(jī)才能識別和執(zhí)行)
  • ⑤. 高級語言(如下圖需要記住)

  • 為了使計(jì)算機(jī)用戶編程序更容易些,后來就出現(xiàn)了各種高級計(jì)算機(jī)語言。高級語言比機(jī)器語言、匯編語言更接近人的語言
  • 當(dāng)計(jì)算機(jī)執(zhí)行高級語言編寫的程序時,仍然需要把程序解釋和編譯成機(jī)器的指令碼。完成這個過程的程序就叫做解釋程序或編譯程序
  • 四、解釋器 掌握

    ①.JVM設(shè)計(jì)者們的初衷僅僅只是單純地為了滿足Java程序?qū)崿F(xiàn)跨平臺特性,因此避免采用靜態(tài)編譯的方式直接生成本地機(jī)器指令,從而誕生了實(shí)現(xiàn)解釋器在運(yùn)行時采用逐行解釋字節(jié)碼執(zhí)行程序的想法。

    ②. 解釋器真正意義上所承擔(dān)的角色就是一個運(yùn)行時“翻譯者”,將字節(jié)碼文件中的內(nèi)容“翻譯”為對應(yīng)平臺的本地機(jī)器指令執(zhí)行

    ③. 當(dāng)一條字節(jié)碼指令被解釋執(zhí)行完成后,接著再根據(jù)PC寄存器中記錄的下一條需要被執(zhí)行的字節(jié)碼指令執(zhí)行解釋操作

    ④. 在Java的發(fā)展歷史里,一共有兩套解釋執(zhí)行器,即古老的字節(jié)碼解釋器、現(xiàn)在普遍使用的模板解釋器。

    ⑤. 現(xiàn)狀:(了解)

  • 由于解釋器在設(shè)計(jì)和實(shí)現(xiàn)上非常簡單,因此除了Java語言之外,還有許多高級語言同樣也是基于解釋器執(zhí)行的,比如Python、Perl、Ruby等。但是在今天,基于解釋器執(zhí)行已經(jīng)淪落為低效的代名詞,并且時常被一些C/C+ +程序員所調(diào)侃
  • 為了解決這個問題,JVM平臺支持一種叫作即時編譯的技術(shù)。即時編譯的目的是避免函數(shù)被解釋執(zhí)行,而是將整個函數(shù)體編譯成為機(jī)器碼,每次函數(shù)執(zhí)行時,只執(zhí)行編譯后的機(jī)器碼即可,這種方式可以使執(zhí)行效率大幅度提升
  • 不過無論如何,基于解釋器的執(zhí)行模式仍然為中間語言的發(fā)展做出了不可磨滅的貢獻(xiàn)
  • 五、JIT編譯器 掌握

    ①. HostSpot JVM的執(zhí)行方式:當(dāng)虛擬機(jī)啟動的時候,解釋器可以首先發(fā)揮作用,而不必等待即時編譯器全部編譯完成再執(zhí)行,這樣可以省去許多不必要的編譯時間。并且隨著程序運(yùn)行時間的推移,即時編譯器逐漸發(fā)揮作用,根據(jù)熱點(diǎn)探測功能,將有價值的字節(jié)碼編譯為本地機(jī)器指令,以換取更高的程序執(zhí)行效率。

    ②. HotSpot VM 為何解釋器與JIT編譯器共存? ①是結(jié)論,②是解釋:


    ③. 目前HotSpot VM所采用的熱點(diǎn)探測方式是基于計(jì)數(shù)器的熱點(diǎn)探測(采用基于計(jì)數(shù)器的熱點(diǎn)探測,HotSpot VM將會為每一個 方法都建立2個不同類型的計(jì)數(shù)器,分別為方法調(diào)用計(jì)數(shù)器(Invocation Counter) 和回邊計(jì)數(shù)器(BackEdge Counter) )

  • 方法調(diào)用計(jì)數(shù)器用于統(tǒng)計(jì)方法的調(diào)用次數(shù)
  • 回邊計(jì)數(shù)器則用于統(tǒng)計(jì)循環(huán)體執(zhí)行的循環(huán)次數(shù)
  • ④. 方法調(diào)用計(jì)數(shù)器

    ⑤. 回邊計(jì)數(shù)器

    ⑥. 熱度衰減

    六、HotSpot VM 可以設(shè)置程序執(zhí)行方式

    ①. 缺省情況下HotSpot VM是采用解釋器與即時編譯器并存的架構(gòu),當(dāng)然開發(fā)人員可以根據(jù)具體的應(yīng)用場景,通過命令顯式地為Java虛擬機(jī)指定在運(yùn)行時到底是完全采用解釋器執(zhí)行,還是完全采用即時編譯器執(zhí)行。如下所示:

    ②. -Xint: 完全采用解釋器模式執(zhí)行程序;

    ③. -Xcomp: 完全采用即時編譯器模式執(zhí)行程序。如果即時編譯出現(xiàn)問題,解釋器會介入執(zhí)行

    ④. -Xmixed:采用解釋器+即時編譯器的混合模式共同執(zhí)行程序。

    七、HotSpot VM 中的JIT分類

    ①. 在HotSpot VM中內(nèi)嵌有兩個JIT編譯器,分別為Client Compiler和Server
    Compiler,但大多數(shù)情況下我們簡稱為C1編譯器和C2編譯器。開發(fā)人員可以通過如下命.令顯式指定Java虛擬機(jī)在運(yùn)行時到底使用哪一種即時編譯器,如下所示:
    ![在這里插入圖片描述](https://img-blog.csdnimg.cn/20210413111300848.png

    ②. 分層編譯(Tiered Compilation)策略:程序解釋執(zhí)行(不開啟性能監(jiān)控)可以觸發(fā)C1編譯,將字節(jié)碼編譯成機(jī)器碼,可以進(jìn)行簡單優(yōu)化,也可以加上性能監(jiān)控,C2編譯會根據(jù)性能監(jiān)控信息進(jìn)行激進(jìn)優(yōu)化。

    ③. 總結(jié):

  • 一般來講,JIT編譯出來的機(jī)器碼性能比解釋器高。
  • C2編譯器啟動時長比C1編譯器慢,系統(tǒng)穩(wěn)定執(zhí)行以后,C2編譯器執(zhí)行速度遠(yuǎn)遠(yuǎn)快于C1編譯器。
  • 八、Graal編譯器與AOT編譯器

    ①. Graal編譯器

    ②. AOT編譯器(靜態(tài)提前編譯器)

    總結(jié)

    以上是生活随笔為你收集整理的JVM_05 执行引擎(Execution Engine)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

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

    主站蜘蛛池模板: 免费爱爱视频网站 | 日本少妇激情 | 久久伊人亚洲 | 成人精品国产 | 三级黄色免费网站 | 蜜桃视频在线观看网站 | 日韩国产免费 | 中国一级片在线观看 | 美女下部无遮挡 | 少妇精品无码一区二区三区 | 欧洲av无码放荡人妇网站 | 性欧美videos另类艳妇3d | 麻豆资源 | 欧美日韩在线不卡 | 欧美精品91| 亚洲女同志亚洲女同女播放 | 91九色porny视频 | 亚洲av无码乱码国产麻豆 | 夜夜爽av| 欧美日韩综合一区二区三区 | 日本久久黄色 | 国产免费999 | 欧美成人hd | 日韩三区在线 | 国产粉嫩在线观看 | 黄色一毛片 | 欧美精品久久久久性色 | 精品久久久久中文慕人妻 | 四虎5151久久欧美毛片 | 男男做性免费视频网 | 在线免费观看日本 | 一级黄色特级片 | 狠狠香蕉| 中国老太婆性视频 | 羞羞的网站在线观看 | 精品久久国产视频 | 成人av免费网址 | 国产毛片自拍 | 国产三级影院 | 超碰人人射 | 国产无限制自拍 | 国内精品国产三级国产aⅴ久 | 欧美干| 色婷婷av一区二区三区软件 | 国内精品久久久久久久影视简单 | 一区二区成人在线 | 久久精品人妻av一区二区三区 | 久草福利免费 | 亚洲一区国产一区 | 嫩草午夜少妇在线影视 | 色播在线观看 | 久久久影视 | 玖玖色在线| 国产良妇出轨视频在线观看 | 亚洲一区二区高清视频 | 一区二区精 | 亚洲综合图片网 | 亚洲逼逼 | 深夜福利网站 | 美国黄色a级片 | 刘亦菲毛片一区二区三区 | 国产一区二区三区日韩 | 色哟哟视频 | 精品久久久中文字幕人妻 | 农村少妇久久久久久久 | 亚洲欧洲在线观看 | 亚洲激情文学 | 69影院在线观看 | 91精品国产入口在线 | 永久免费不卡在线观看黄网站 | 亚洲GV成人无码久久精品 | 久久久精品中文字幕 | 日本黄色免费在线观看 | 亚洲砖区免费 | 日日日干干干 | 九色首页| 成人三级在线视频 | 日本中文字幕视频在线 | 涩涩资源站 | 亚洲毛片a | 久久99久久久久 | 国产精品久久久久久久久岛 | 啪视频在线观看 | 欧美日韩视频在线播放 | 午夜精品福利电影 | 91免费观看视频在线 | 国产精品自拍电影 | a毛片在线 | 涩涩免费网站 | 秋霞在线观看视频 | 波多野结衣视频一区 | 天天干,天天爽 | 日韩a∨| 日本毛片在线看 | 黄色国产在线 | 火影黄动漫免费网站 | 成人a网| 四季av国产一区二区三区 | 黄片毛片在线免费观看 |