簡體   English   中英

如果JIT正在執行到機器指令的字節碼轉換,那么JVM的用途是什么

[英]What is the use of JVM if JIT is performing bytecode conversion to machine instructions

我真的很難理解以下事情

以前我知道:

編譯Java程序時,將生成.class文件。 在那個代碼是字節的形式。 然后JVM將該字節代碼轉換為機器可理解的格式。

現在我在SO中的一個問題中看到了

Just-In-Time(JIT)編譯器是運行時解釋器的一個特性,它不是在每次調用方法時解釋字節碼,而是將字節碼編譯成運行機器的機器代碼指令。

所以這里JIT將字節碼轉換為機器指令。 那么JVM的用途是什么。 我們可以用JIT做到這一點。 據我所知,JIT僅用於提高JVM的性能。

JIT只是JVM的一部分 其他部分包括字節碼解釋器,類加載驗證和鏈接機制,以及反射,I / O等內容的本機代碼支持。

從這個意義上說,JIT並沒有使JVM運行得更快。 相反,它使Java代碼運行得更快......而不是JVM只是解釋它。

實際上,JVM 確實開始解釋字節碼。 經過一段時間后,JVM使用其JIT編譯器將大量使用的方法編譯為本機代碼,使用在解釋時收集的統計信息來調整手頭問題的代碼。

順便說一下,你引用的這部分文字是笨拙的,技術上不准確:

實時(JIT)編譯器是運行時解釋器的一個特性... (上下文)

實際上,JIT不是解釋器的一個特性。 相反,JIT是解釋器一起工作的JVM的功能。

要明確:

JVM執行以下所有操作:

它保留在操作系統的頂層,並提供編譯的java程序和操作系統之間的抽象。 這樣,java編譯的程序就不必擔心它必須工作的平台。 Java程序將代碼編譯為JVM可以理解和執行的字節碼。

JIT

當JVM編譯類文件時,它不會完成完整的類文件; 它根據需要僅編譯其中的一部分。 這避免了對完整源代碼的大量解析。 這種類型的編譯稱為JIT或Just-In-Time編譯。 JVM是依賴於平台(OS)的代碼生成JIT是面向平台的,生成本機字節代碼,因此它比JVM更快:)

Java虛擬機(JVM)提供了運行Java程序的整個環境。 它與操作系統集成,加載類並運行程序。 Just-In-Time編譯器(JIT)只是一小部分可以被禁用(-Xint),但是在啟用時,它提供了有用的性能改進。 已經存在不包含JIT的JVM的實現,以及通過將Java預編譯為與傳統語言(例如C或C ++)相同的機器代碼而實現的實現。

它及時編譯它以便JVM進行優化。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM