簡體   English   中英

Java編譯器是JVM的一部分嗎?

[英]Is the java compiler part of the JVM?

我正在閱讀一些有關JVM的文章,並發現了一些令人困惑的信息。

例如在這里: http : //www.cs.cmu.edu/~jcarroll/15-100-s05/supps/basics/history.html

它說:“實際上,Java編譯器通常被稱為JVM編譯器(對於Java虛擬機)”。

此外,如果Java編譯器是否是JVM的一部分,我將找不到確切的答案。 我知道JVM是解釋器,但我讀到它也做了一些編譯。 而且,據我所知,JVM是JRE的一部分。 JDK的javac部分和JDK的JRE部分。

那么javac是JVM的一部分嗎? 我認為不是,但是不確定。

這主要是關於術語,措辭。

java 二進制可執行文件 (以及它的一些細微變化,例如javaw)。 那就是java虛擬機! 您調用該二進制文件,然后啟動JVM(有關所有榮耀的詳細信息,請參見此處 )。

在本質上:

  • JRE包含JVM(上述java二進制文件)
  • JDK包含一個JVM, 以及為Java 開發的工具和庫(因此: javajavac

最后:對於javac使用術語“ JVM編譯器”是錯誤的並且具有誤導性。 javac將Java源代碼轉換為Java字節碼,然后可由JVM執行。 但這里要真正完成的是:大多數JVM實現包含“及時”編譯器組件,用於將字節代碼轉換為本地機器代碼以提高性能。

一些JVM將執行JIT(Just in Time)編譯,以優化Java字節碼。 另外,可以在代碼中執行此操作

JavaCompiler編譯器= ToolProvider.getSystemJavaCompiler();

但是傳統上,編譯器是JDK的一部分,並且應用程序是隨不包含Javac的JRE一起分發的

盡管“ Java編譯器通常被稱為JVM編譯器(用於Java虛擬機)”可能會引起誤解,但它仍然成立,因為javac本質上將Java源代碼轉換為字節代碼以供JVM運行,然后根據Javac將其解釋為機器可讀指令。平台

由於javac是JVM的編譯器,因此它不是其中的一部分。

但是正如Ghostcat指出的那樣,將Javac稱為JVM編譯器會產生誤導,因為JVM擁有自己的即時編譯實現

希望這能為早先的答案增色

同時,我找到了該圖像,該圖像准確地說明了Java編譯器所在的位置,並且它是JDK的一部分,而不是JVM或JRE的一部分:

圖表

暫無
暫無

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

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