Java编译器是JVM的一部分吗?

Ale*_*jan 1 java jvm javac

我正在阅读一些有关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的一部分吗?我认为不是,但是不确定。

Gho*_*ica 5

这主要是关于术语,措辞。

java 二进制可执行文件(以及它的一些细微变化,例如javaw)。那就是java虚拟机!您调用该二进制文件,然后启动JVM(有关所有荣耀的详细信息,请参见此处)。

在本质上:

  • JRE包含JVM(上述java二进制文件)
  • JDK包含JVM,以及为Java 开发的工具和库(因此:javajavac

最后:使用术语“ JVM编译器” javac表示错误和误导。javac将Java源代码转换为Java字节码,然后可由JVM执行。但是这里要真正完成的是:大多数JVM实现包含一个“及时”编译器组件,用于将字节代码转换为本地机器代码以提高性能。


Ale*_*jan 5

同时,我发现这张图片准确地说明了 java 编译器的位置,它是 JDK 的一部分,但不是 JVM 或 JRE 的一部分:

图表