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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

Java之Java程序与虚拟机

發布時間:2025/3/21 java 14 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Java之Java程序与虚拟机 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Java為什么要在虛擬機中運行

  • 簡單的來說,Java作為一門高級程序語言,語法復雜,抽象度高,不能直接翻譯為機器碼在機器上運行,所以設計者就設計了虛擬機,通過編譯器將Java程序轉換成虛擬機所能識別的指令碼,也就是Java字節碼,Java字節碼會被虛擬機翻譯為可以被機器識別的機器碼.這也實現了Java的跨平臺
  • 虛擬機的第二個好處就是帶來了一個托管環境,托管環境能夠代替我們處理代碼中冗余并且容易出錯的部分,比如自動內存管理,垃圾回收. 還有諸如數組越界、動態類型、安全權限等等動態監測.
  • Java如何在虛擬機中運行的

  • 從虛擬機角度來看,執行Java代碼首先需要將它編譯而成的class文件加載到虛擬機中.加載后的Java類會被存放與方法區(Method Area)中,運行時,虛擬機執行方法區內的代碼
  • Java虛擬機如何存儲運行時的數據

    Java虛擬機在內存中劃分出堆和棧來存儲運行時數據.并且將棧細分為面向Java方法的Java方法棧,面向本地方法的本地方法棧,以及存放各個線程執行位置的PC寄存器.

    運行的過程中,每當調用一個方法,Java虛擬機會在當前線程的Java方法棧中生成一個棧幀,存放局部變量以及字節碼操作數.這個棧幀大小提前計算好,而且Java虛擬機不要求棧幀在內存空間中連續分步.退出執行方法時,Java虛擬機會彈出當前線程的當前棧幀,并舍棄.

    前面說到Java字節碼會被虛擬機翻譯成機器碼,那是如何翻譯的呢?有兩種形式:第一種是解釋執行,也就是逐條將字節碼翻譯成機器碼并執行,優勢是無需等待編譯.第二種是即時編譯(JIT),也就是將一個方法中包含的所有字節碼編譯成機器碼后再執行,優勢在于實際運行速度很快.而我們常用的HotSpot虛擬機默認采用混合模式,綜合了解釋執行和即時編譯兩者的優點,先解釋執行字節碼,而后將反復執行的熱點代碼,以方法為單位進行即時編譯.

    運行效率如何

    前面說的極是編譯就是用來提升性能以及峰值性能,它是建立在程序符合二八定律的假設上,也就是百分之二十的代碼占據百分之八十的計算資源.

    如何理解?對于占據大部分不常用的代碼,無需耗費時間將其編譯成機器碼,而是采取解釋執行的方式運行;另一方面,對于占據小部分的熱點代碼,將其編譯器成機器碼,提高運行速度.

    HotSpot 內置了多個即時編譯器:C1、C2 和 Graal。Graal 是
    Java 10 正式引入的實驗性即時編譯器,InfoQ上有個介紹(http://www.infoq.com/cn/articles/Graal-Java-JIT-Compiler?utm_source=articles_about_java&utm_medium=link&utm_campaign=java),有興趣的可以了解下.

    C1 又叫做 Client 編譯器,面向的是對啟動性能有要求的客戶端 GUI 程序,采用的優化手段相對簡單,因此編譯時間較短。

    C2 又叫做 Server 編譯器,面向的是對峰值性能有要求的服務器端程序,采用的優化手段相對復雜,因此編譯時間較長,但同時生成代碼的執行效率較高。

    Java7開始,HotSpot默認采取分層編譯:熱點方法首先被C1編譯,而后熱點方法中的熱點會進一步被C2編譯.

    總結

    之所以要在虛擬機中運行,是因為它提供了可移植性。一旦 Java 代碼被編譯為 Java 字節碼,便可以在不同平臺上的 Java 虛擬機實現上運行。此外,虛擬機還提供了一個代碼托管的環境,
    代替我們處理部分冗長而且容易出錯的事務,例如內存管理。

    Java 虛擬機將運行時內存區域劃分為五個部分,分別為方法區、堆、PC 寄存器、Java 方法棧和本地方法棧。Java 程序編譯而成的 class 文件,需要先加載至方法區中,方能在 Java 虛擬機
    中運行。

    為了提高運行效率,標準 JDK 中的 HotSpot 虛擬機采用的是一種混合執行的策略。

    它會解釋執行 Java 字節碼,然后會將其中反復執行的熱點代碼,以方法為單位進行即時編譯,翻譯成機器碼后直接運行在底層硬件之上。

    HotSpot 裝載了多個不同的即時編譯器,以便在編譯時間和生成代碼的執行效率之間做取舍。

    轉載于:https://www.cnblogs.com/wadmwz/p/9392098.html

    《新程序員》:云原生和全面數字化實踐50位技術專家共同創作,文字、視頻、音頻交互閱讀

    總結

    以上是生活随笔為你收集整理的Java之Java程序与虚拟机的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。