Java编译器和JVM是用哪种语言编写的?

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

107617 次浏览

原则上几乎任何事情,通常C

Java文档

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

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

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

Jikes区,一个广泛用于研究目的的自托管JVM是用Java编写的。它不是人们在桌面上运行的那种,但它在我的“现在让我们展示一下这种语言的强大功能”列表中名列前茅。

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

  • Sun JVM 写在C中,尽管这并不需要是这种情况- JVM在您的机器上运行时是一个平台依赖的可执行文件,因此可以最初是用任何语言编写的。例如,最初的IBM JVM是在Smalltalk中编写的

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

  • 我相信Sun提供的Java编译器也是用Java编写的。(尽管有多种编译器)

假设你说的是Hotspot JVM,它是Sun提供的iirc,它是用c++写的。有关Java的各种虚拟机的更多信息,您可以检查链接>,像大多数Java编译器一样,是用Java编写的。

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

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

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

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

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

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

(更多信息,你可以检查这个链接:https://docs.oracle.com/javase/specs/jvms/se7/html/)

一如既往的流行语言,用- C、c++编写。