最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java虛擬機如何運行Java字節(jié)碼

 更新時間:2024年06月13日 15:10:26   作者:-紅桃K  
這篇文章主要介紹了Java虛擬機如何運行Java字節(jié)碼的問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教

Java虛擬機如何運行Java字節(jié)碼

以標(biāo)準(zhǔn) JDK 中的 HotSpot 虛擬機為例,從虛擬機以及底層硬件兩個角度來看Java 虛擬機具體是怎么運行 Java 字節(jié)碼的。

虛擬機視角

從虛擬機視角來看,執(zhí)行 Java 代碼首先需要將它編譯而成的 class 文件加載到 Java 虛擬機中。

加載后的 Java 類會被存放于方法區(qū)(Method Area)中。

實際運行時,虛擬機會執(zhí)行方法區(qū)內(nèi)的代碼。

在運行過程中,每當(dāng)調(diào)用進入一個 Java 方法,Java 虛擬機會在當(dāng)前線程的 Java 方法棧中生成一個棧幀,用以存放局部變量以及字節(jié)碼的操作數(shù)。

這個棧幀的大小是提前計算好的,而且 Java 虛擬機不要求棧幀在內(nèi)存空間里連續(xù)分布。

當(dāng)退出當(dāng)前執(zhí)行的方法時,不管是正常返回還是異常返回,Java 虛擬機均會彈出當(dāng)前線程的當(dāng)前棧幀,并將之舍棄。

硬件視角

從硬件視角來看,Java 字節(jié)碼無法直接執(zhí)行。因此,Java 虛擬機需要將字節(jié)碼翻譯成機器碼。

在 HotSpot 里面,上述翻譯過程有兩種形式:

  • 第一種是解釋執(zhí)行,即逐條將字節(jié)碼翻譯成機器碼并執(zhí)行;
  • 第二種是即時編譯(Just-In-Time compilation,JIT),即將一個方法中包含的所有字節(jié)碼編譯成機器碼后再執(zhí)行。

前者的優(yōu)勢在于無需等待編譯,而后者的優(yōu)勢在于實際運行速度更快。

HotSpot 默認采用混合模式,綜合了解釋執(zhí)行和即時編譯兩者的優(yōu)點。

它會先解釋執(zhí)行字節(jié)碼,而后將其中反復(fù)執(zhí)行的熱點代碼,以方法為單位進行即時編譯。

即時編譯

即時編譯建立在程序符合二八定律的假設(shè)上,也就是百分之二十的代碼占據(jù)了百分之八十的計算資源。

對于占據(jù)大部分的不常用的代碼,我們無需耗費時間將其編譯成機器碼,而是采取解釋執(zhí)行的方式運行;

另一方面,對于僅占據(jù)小部分的熱點代碼,我們則可以將其編譯成機器碼,以達到理想的運行速度。

為了滿足不同用戶場景的需要,HotSpot 內(nèi)置了多個即時編譯器:C1、C2 和 Graal。

Graal 是 Java 10 正式引入的實驗性即時編譯器,這里暫不做討論。

之所以引入多個即時編譯器,是為了在編譯時間和生成代碼的執(zhí)行效率之間進行取舍。

  • C1 又叫做 Client 編譯器,面向的是對啟動性能有要求的客戶端 GUI 程序,采用的優(yōu)化手段相對簡單,因此編譯時間較短。
  • C2 又叫做 Server 編譯器,面向的是對峰值性能有要求的服務(wù)器端程序,采用的優(yōu)化手段相對復(fù)雜。

因此編譯時間較長,但同時生成代碼的執(zhí)行效率較高。

從 Java 7 開始,HotSpot 默認采用分層編譯的方式:熱點方法首先會被 C1 編譯,而后熱點方法中的熱點會進一步被 C2 編譯。

為了不干擾應(yīng)用的正常運行,HotSpot 的即時編譯是放在額外的編譯線程中進行的。

HotSpot 會根據(jù) CPU 的數(shù)量設(shè)置編譯線程的數(shù)目,并且按 1:2 的比例配置給 C1 及 C2 編譯器。

在計算資源充足的情況下,字節(jié)碼的解釋執(zhí)行和即時編譯可同時進行。

編譯完成后的機器碼會在下次調(diào)用該方法時啟用,以替換原本的解釋執(zhí)行。

總結(jié)

以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • 詳解Java編程中throw和throws子句的使用方法

    詳解Java編程中throw和throws子句的使用方法

    這篇文章主要介紹了詳解Java編程中throw和throws子句的使用方法,是Java入門學(xué)習(xí)中的基礎(chǔ)知識,需要的朋友可以參考下
    2015-09-09
  • Java二維數(shù)組實戰(zhàn)案例

    Java二維數(shù)組實戰(zhàn)案例

    這篇文章主要介紹了Java二維數(shù)組,結(jié)合具體案例形式分析了java二維數(shù)組定義、遍歷、計算等相關(guān)操作技巧,需要的朋友可以參考下
    2019-08-08
  • mybatis-plus分頁查詢的實現(xiàn)實例

    mybatis-plus分頁查詢的實現(xiàn)實例

    頁查詢是一項常用的數(shù)據(jù)庫查詢方法,本文主要介紹了mybatis-plus分頁查詢的實現(xiàn)實例,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2024-06-06
  • 如何利用SpringBoot搭建WebService服務(wù)接口

    如何利用SpringBoot搭建WebService服務(wù)接口

    之前項目經(jīng)理想要開發(fā)一個webservice的協(xié)議,給我一個星期的時間,后面用springboot開發(fā)了webservice,這篇文章主要給大家介紹了關(guān)于如何利用SpringBoot搭建WebService服務(wù)接口的相關(guān)資料,需要的朋友可以參考下
    2023-11-11
  • Java 實現(xiàn)多線程的幾種方式匯總

    Java 實現(xiàn)多線程的幾種方式匯總

    JAVA多線程實現(xiàn)方式主要有三種:繼承Thread類、實現(xiàn)Runnable接口、使用ExecutorService、Callable、Future實現(xiàn)有返回結(jié)果的多線程。其中前兩種方式線程執(zhí)行完后都沒有返回值,只有最后一種是帶返回值的。
    2016-03-03
  • Java線上CPU內(nèi)存沖高問題排查解決步驟

    Java線上CPU內(nèi)存沖高問題排查解決步驟

    這篇文章主要介紹了Java線上CPU內(nèi)存沖高問題排查解決步驟的相關(guān)資料,Java程序在實際生產(chǎn)過程中經(jīng)常遇到CPU或內(nèi)存使用率高的問題,文中通過實例代碼介紹的非常詳細,需要的朋友可以參考下
    2023-07-07
  • 詳解Java中多線程異常捕獲Runnable的實現(xiàn)

    詳解Java中多線程異常捕獲Runnable的實現(xiàn)

    這篇文章主要介紹了詳解Java中多線程異常捕獲Runnable的實現(xiàn)的相關(guān)資料,希望通過本文能幫助到大家,讓大家理解掌握這樣的知識,需要的朋友可以參考下
    2017-10-10
  • java繼承學(xué)習(xí)之super的用法解析

    java繼承學(xué)習(xí)之super的用法解析

    本文介紹java繼承super的用法,Java繼承是會用已存在的類的定義作為基礎(chǔ)建立新類的技術(shù)新類的定義可以增加新的數(shù)據(jù)或者新的功能,也可以使用父類的功能,但不能選擇性的繼承父類 這種繼承使得復(fù)用以前的代碼非常容易,能夠大大的縮短開發(fā)的周期,需要的朋友可以參考下
    2022-02-02
  • 使用javafx更新UI的方法

    使用javafx更新UI的方法

    這篇文章主要介紹了使用javafx更新UI的方法,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-07-07
  • SpringBoot超詳細講解@Enable*注解和@Import

    SpringBoot超詳細講解@Enable*注解和@Import

    這篇文章主要介紹了SpringBoot?@Enable*注解和@Import,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-07-07

最新評論

衡山县| 洞头县| 乡城县| 云南省| 邯郸县| 平远县| 武乡县| 黄石市| 安吉县| 新兴县| 宾川县| 嘉兴市| 曲靖市| 山阳县| 池州市| 博兴县| 宣恩县| 都兰县| 河津市| 翼城县| 盐山县| 稻城县| 望江县| 衡东县| 宁化县| 丽江市| 瑞昌市| 行唐县| 盐亭县| 南丹县| 临清市| 夏邑县| 疏附县| 通化县| 瑞昌市| 宁海县| 修水县| 大新县| 乐业县| 云南省| 平乐县|