繁体   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