java - java编译器是JVM的一部分吗?

标签 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 的一部分吗?我认为不是,但不确定。

最佳答案

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

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

本质上:

  • 一个 JRE 包含一个 JVM(前面提到的 java 二进制文件)
  • 一个 JDK 包含一个 JVM,用于开发 Java 的工具和库(因此:javajavac)

最后:对 javac 使用术语“JVM 编译器”是错误的并且具有误导性。 javac 将java源代码转换为java字节码,然后由JVM执行。但在这里要真正完整:大多数 JVM 实现包含一个“即时”编译器组件,用于将字节码转换为 native 机器码以提高性能。

关于java - java编译器是JVM的一部分吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53591672/

相关文章:

java - GWT 面板类型的问题

java socket编程对话

java - 如何调试 JVM 中的挂起线程?

java 1.6 32 位最小和最大堆内存问题

javac无法导入项目中的类

java - 为什么 Java 编译器要为包私有(private)父类(super class)型中定义的公共(public)方法添加可见性桥接方法?

java - 为什么二次时间算法比线性时间算法执行得更快

java - 判断是否是锁类型(读或写)

java - JVM 前 4 个 boolean 值优化,而不是第 5 个

java - 编译类名中包含特殊字符的 Java 文件时出错