Java 编译器(javac
),虚拟机(JVM)和java
启动器使用哪种语言编写?
Java 编译器(javac
),虚拟机(JVM)和java
启动器使用哪种语言编写?
Answers:
这个问题的确切措辞有点误导:它不是“ JVM”或“编译器”,因为有多个JVM供应商(jrockit是一个,IBM是另一个)并且那里有多个编译器。
Sun JVM 是用Java 编写的C
,尽管并非必须如此-在您的计算机上运行的JVM是平台相关的可执行文件,因此本来可以用任何语言编写。例如,原始的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编写,运行时用ANSI C编写
实际上,Oracle JVM是用C ++而不是C编写的。
在这里查看HotSpot JVM代码:http : //openjdk.java.net/groups/hotspot/
Jikes RVM是一种广泛用于研究目的的自托管JVM,是用Java编写的。不是一个人在桌面上运行,而是在我的清单上“现在让我们展示这种语言的强大功能”。
假设您正在谈论Hotspot JVM,它是Sun提供的iirc,它是用C ++编写的。有关Java的各种虚拟机的更多信息,您可以检查此链接。 像大多数Java编译器一样,javac是用Java编写的。
(有关更多信息,您可以检查以下链接:https : //docs.oracle.com/javase/specs/jvms/se7/html/)