![](/img/trans.png)
[英]Why Java compiler as distributed as executable and not as JVM bytecode?
[英]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(有關所有榮耀的詳細信息,請參見此處 )。
在本質上:
java
二進制文件) java
和javac
) 最后:對於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擁有自己的即時編譯實現
希望這能為早先的答案增色
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.