Java编译器( javac
)、虚拟机 (JVM) 和java
启动器是用哪些语言编写的?
9 回答
这个问题的确切措辞有点误导:它不是“JVM”或“编译器”,因为有多个 JVM 供应商(jrockit 是一个,IBM 另一个)和多个编译器。
Sun JVM是用.
C
_ _ _ 例如,最初的 IBM JVM 是用Smalltalk编写的Java 库(
java.lang
等java.util
,通常称为Java API)本身是用 Java 编写的,尽管标记为的方法将使用或native
编写。C
C++
我相信 Sun 提供的 Java 编译器也是用 Java 编写的。(虽然同样,那里有多个编译器)
第一个 Java 编译器由 Sun Microsystems 开发,使用 C++ 中的一些库用 C 语言编写。今天,Java 编译器是用 Java 编写的,而 JRE 是用 C 编写的。
我们可以想象一下 Java 编译器是如何用 Java 编写的:
Java 编译器是作为 Java 程序编写的,然后使用 C 编写的 Java 编译器(第一个 Java 编译器)进行编译。因此我们可以使用新编译的Java编译器(用Java编写)来编译Java程序。
来自Java 文档
编译器用 Java 编写,运行时用 ANSI C 编写
实际上,Oracle JVM 是用 C++ 编写的,而不是 C。
看看这里的 HotSpot JVM 代码:http: //openjdk.java.net/groups/hotspot/
原则上几乎任何东西,通常是 C
这个链接应该回答你的问题
似乎编译器现在是用 Java 编写的,但运行时是用 ANSI C 编写的
- 当 Sun Microsystem 引入 Java 时,Java 编译器是使用 C++ 中的一些库用 C 编写的。
- 由于编译器设计中有一个称为引导程序的概念,它主要用于编译器开发,引导程序是在要编译的源编程语言中编写编译器(或汇编程序)的过程。它用于生成自托管编译器。新编程语言编译器的开发首先用现有语言开发,然后用新语言重写并自行编译。 这就是为什么今天,Java 编译器是用 Java 本身编写的。
- Java 虚拟机: Java 虚拟机是一种抽象机器。像真正的计算机一样,它有一个指令集并操作运行时的各种内存区域。通常,JVM 将字节码解释为机器码。
(有关更多信息,您可以查看此链接:https ://docs.oracle.com/javase/specs/jvms/se7/html/ )
Jikes RVM是一种广泛用于研究目的的自托管 JVM,它是用 Java 编写的。它不是人们在他们的桌面上运行的,但它在我的“现在让我们展示语言的一般力量”列表中位居前列。
假设您谈论的是 Sun 提供的 iirc 的 Hotspot JVM,它是用 C++ 编写的。有关 Java 的各种虚拟机的更多信息,您可以查看此链接。 javac与大多数 Java 编译器一样,是用 Java 编写的。