229

Java编译器( javac)、虚拟机 (JVM) 和java启动器是用哪些语言编写的?

4

9 回答 9

189

这个问题的确切措辞有点误导:它不是“JVM”“编译器”,因为有多个 JVM 供应商(jrockit 是一个,IBM 另一个)和多个编译器

  • Sun JVM用. C_ _ _ 例如,最初的 IBM JVM 是用Smalltalk编写的

  • Java 库(java.langjava.util,通常称为Java API)本身是用 Java 编写的,尽管标记为的方法将使用或native编写。CC++

  • 我相信 Sun 提供的 Java 编译器也是用 Java 编写的。(虽然同样,那里有多个编译器)

于 2009-08-03T06:47:01.030 回答
126

第一个 Java 编译器由 Sun Microsystems 开发,使用 C++ 中的一些库用 C 语言编写。今天,Java 编译器是用 Java 编写的,而 JRE 是用 C 编写的。

我们可以想象一下 Java 编译器是如何用 Java 编写的:

Java 编译器是作为 Java 程序编写的,然后使用 C 编写的 Java 编译器(第一个 Java 编译器)进行编译。因此我们可以使用新编译的Java编译器(用Java编写)来编译Java程序。

于 2013-07-21T17:09:07.807 回答
70

来自Java 文档

编译器用 Java 编写,运行时用 ANSI C 编写

于 2009-08-03T06:45:05.620 回答
18

实际上,Oracle JVM 是用 C++ 编写的,而不是 C。

看看这里的 HotSpot JVM 代码:http: //openjdk.java.net/groups/hotspot/

于 2012-02-29T22:36:40.173 回答
10

原则上几乎任何东西,通常是 C

于 2009-08-03T06:44:57.367 回答
10

这个链接应该回答你的问题

似乎编译器现在是用 Java 编写的,但运行时是用 ANSI C 编写的

于 2009-08-03T06:45:18.990 回答
4
  • 当 Sun Microsystem 引入 Java 时,Java 编译器是使用 C++ 中的一些库用 C 编写的。
  • 由于编译器设计中有一个称为引导程序的概念,它主要用于编译器开发,引导程序是在要编译的源编程语言中编写编译器(或汇编程序)的过程。它用于生成自托管编译器。新编程语言编译器的开发首先用现有语言开发,然后用新语言重写并自行编译。 这就是为什么今天,Java 编译器是用 Java 本身编写的
  • Java 虚拟机: Java 虚拟机是一种抽象机器。像真正的计算机一样,它有一个指令集并操作运行时的各种内存区域。通常,JVM 将字节码解释为机器码。

(有关更多信息,您可以查看此链接:https ://docs.oracle.com/javase/specs/jvms/se7/html/ )

于 2020-03-26T10:48:28.133 回答
3

Jikes RVM是一种广泛用于研究目的的自托管 JVM,它是用 Java 编写的。它不是人们在他们的桌面上运行的,但它在我的“现在让我们展示语言的一般力量”列表中位居前列。

于 2009-08-03T06:46:57.363 回答
3

假设您谈论的是 Sun 提供的 iirc 的 Hotspot JVM,它是用 C++ 编写的。有关 Java 的各种虚拟机的更多信息,您可以查看此链接javac与大多数 Java 编译器一样,是用 Java 编写的。

于 2009-08-03T06:51:38.100 回答