• Java虛擬機

    編輯
    本詞條由“匿名用戶” 建檔。

    Java虛擬機

    編輯

    Java虛擬機(JVM)是一種虛擬機,使計算機運行的Java程序,以及寫在程序的其他語言,它們也編譯成Java字節碼。通過規范詳細描述了JVM,該規范正式描述了JVM實現中的要求。有了規范,可以確保Java程序在不同實現中的互操作性,因此使用Java開發工具包(JDK)的程序作者不必擔心基礎硬件平臺的特性。

    Java虛擬機參考實現由OpenJDK項目作為開放源代碼開發,并包括一個稱為HotSpot的JIT編譯器。Oracle Corporation提供的商業支持的Java版本基于OpenJDK運行時。Eclipse?OpenJ9是OpenJDK的另一個開源JVM。

    Java虛擬機

    Java虛擬機規范

    編輯

    Java虛擬機是由規范定義的抽象(虛擬)計算機。沒有指定使用的垃圾收集算法以及Java虛擬機指令的任何內部優化(將其翻譯成機器代碼)。忽略的主要原因是不要不必要地限制實施者。任何Java應用程序都只能在Java虛擬機抽象規范的某些具體實現中運行。

    從Java Platform Standard Edition(J2SE)5.0開始,在Java Community Process下開發了對JVM規范的更改,稱為JSR924。從2006年開始,對規范的更改以支持對類文件格式(JSR)提出的更改。被完成為JSR 924的維護版本為JVM的規范發布的藍皮書,所述的前言中指出:

    我們希望該規范應充分記錄Java虛擬機,以使兼容的潔凈室實現成為可能。Oracle提供的測試可以驗證Java虛擬機實現的正確運行。

    Oracle的Java虛擬機之一名為HotSpot,而從BEA Systems繼承的另一個JVM為JRockit。潔凈室Java實現包括Kaffe,OpenJ9和Skelmir的CEE-J。Oracle擁有Java商標,并且可以允許其用于證明實施套件與Oracle規范完全兼容。

    類加載器

    類是Java虛擬機字節碼的組織單位之一。類加載器的實現必須能夠識別并加載符合Java類文件格式的任何內容。任何實現都可以自由識別除類文件之外的其他二進制形式,但必須識別類文件。

    類加載器按此嚴格順序執行三個基本活動:

    1. 加載:查找并導入類型的二進制數據
    2. 鏈接:執行驗證,準備和(可選)解析
      • 驗證:確保導入類型的正確性
      • 準備:為類變量分配內存并將內存初始化為默認值
      • 解決:將符號引用從類型轉換為直接引用。
    3. 初始化:調用將類變量初始化為其正確起始值的Java代碼。

    通常,類加載器有兩種類型:引導類加載器和用戶定義的類加載器。

    每個Java虛擬機實現都必須具有一個引導類加載器,該加載器能夠加載受信任的類。Java虛擬機規范未指定類加載器應如何定位類。

    虛擬機架構

    Java虛擬機對原始值(整數和浮點數)和引用進行操作。JVM基本上是32位計算機。本機支持64位longdouble類型的類型,但是它們消耗幀的局部變量或操作數堆棧中的兩個存儲單元,因為每個單元都是32位。boolean、byte、shortchar類型都是符號擴展(除char其是零擴展)和作為32位整數,相同操作int的類型。較小的類型僅具有一些特定于類型的指令,用于加載、存儲和類型轉換。boolean以8位byte值操作,0代表false1代表true。(雖然boolean一直被當成因為類型的Java虛擬機規范,第二版澄清了這個問題,在編譯和執行的代碼是有區別不大boolean并且byte除了名字改編的方法簽名和布爾陣列的類型。booleanS IN方法簽名錯位作為Zbytes的錯位如B布爾陣列攜帶型boolean[],但每個元件使用8位,Java虛擬機已經沒有內置的能力收拾布爾值到一個位陣列,因此除了他們執行和行為的類型與byte數組相同。在所有其他用途中,booleanJVM實際上不知道type類型,因為所有對布爾值進行操作的指令也都用于對bytes進行操作。)

    Java虛擬機具有用于收集對象和數組的垃圾回收堆。代碼、常量和其他類別數據存儲在“方法區域”中。方法區域在邏輯上是堆的一部分,但是實現可以將方法區域與堆分開對待,例如,可能不會對其進行垃圾回收。每個JVM線程還具有自己的調用堆棧(為清楚起見,稱為“ Java虛擬機堆棧”),該堆棧存儲框架。每次調用方法時都會創建一個新框架,并且該方法退出時該框架將被銷毀。

    每個框架提供一個“操作數堆棧”和一個“局部變量”數組。操作數棧用于計算操作數和接收被調用方法的返回值,而局部變量的作用與寄存器相同,還用于傳遞方法參數。因此,Java虛擬機既是堆棧機又是寄存器機。

    字節碼指令

    Java虛擬機具有以下任務組的說明:

    • 加載和存儲
    • 算術
    • 類型轉換
    • 對象創建和操作
    • 操作數堆棧管理(推/彈出)
    • 控制轉移(分支)
    • 方法調用和返回
    • 拋出異常
    • 基于xxx器的并發

    目的是二進制兼容性。每個特定的主機操作系統都需要自己的JVM和運行時實現。這些JVM在語義上以相同的方式解釋字節碼,但實際實現可能有所不同。與模擬字節碼相比,更復雜的方法是兼容且有效地實現必須映射到每個主機操作系統的Java核心API。

    這些說明在一組通用的上進行操作?抽象的數據類型而不是任何特定指令集體系結構的本地數據類型。

    Java虛擬機語言

    JVM語言是具有可以用Java虛擬機可以承載的有效類文件表示的功能的任何語言。一個類文件包含Java虛擬機指令(Java字節碼)和一個符號表,以及其他輔助信息。類文件格式是獨立于硬件和操作系統的二進制格式,用于表示已編譯的類和接口。

    有幾種JVM語言,既有移植到JVM的舊語言又有全新的語言。JRuby和Jython可能是現有語言中最著名的端口,分別是Ruby和Python。在從頭創建到Java字節碼的新語言中,Clojure,Apache Groovy,Scala和Kotlin可能是最受歡迎的語言。JVM語言的一個顯著特征是它們彼此兼容,例如,Scala庫可以與Java程序一起使用,反之亦然。

    Java 7 JVM在Java平臺上實現了JSR 292:支持動態類型語言,這是一項新功能,它支持JVM中的動態類型語言。該功能是在達芬奇機器項目中開發的,其目的是擴展Java虛擬機,使其支持Java以外的語言。

    內容由匿名用戶提供,本內容不代表www.gelinmeiz.com立場,內容投訴舉報請聯系www.gelinmeiz.com客服。如若轉載,請注明出處:http://www.gelinmeiz.com/116409/

    (4)
    詞條目錄
    1. Java虛擬機
    2. Java虛擬機規范
    3. 類加載器
    4. 虛擬機架構
    5. 字節碼指令
    6. Java虛擬機語言

    輕觸這里

    關閉目錄

    目錄
    91麻精品国产91久久久久