奇思妙想 · 2024年 6月 2日 0

java.exe和javac.exe源代码是用什么编程语言?

22 次浏览

单纯以JVM和Java编译器角度,Java编译器可以使用任何语言(最早的Java(早期叫Oak)编译器是C语言编写,后来改为Java语言自举)。JVM有所不同,它必须包含native代码以完成.class文件解析并执行,一般意义上,JVM不能选用它自身的语言Java去编写。以实作看,JVM主体以C++为主。

上面这些大道理听起来很有道理,但对于这个问题没什么帮助。

  • 对于Windows环境,官方Windows JDK编译环境选择VS MSVC和Cygwin. 这意味着,javac.exe和java.exe最终都是C/C++代码编写的。
  • 你可以会疑惑,JDK中根本没找到C/C++编写的javac编译器,它们在哪里呢?
  • 用VC++工具解析javac.exe:
    dumpbin /all "D:\Program Files\Java\jdk1.8.0_301\bin\javac.exe"
    我们得到了如下这段:
    c:\jenkins\workspace\8-2-build-windows-amd64-cygwin\jdk8u301\1513\build\windows-amd64\jdk\objs\javac_objs\javac.pdb
  • javac.exe和java.exe只是"前端", 把参数传递给JVM去执行,并没有执行具体的编译器和解释器的本质工作。真正的执行会由JVM执行完成,其中javac.exe转交给Java语言编写的编译器完成。
  • javac.exe (版本1.8)本质上就是java.exe -cp "%JAVA_HOME%\lib\tools.jar" com.sun.tools.javac.Main.
    即如下两种相同的:
    • java.exe -cp "%JAVA_HOME%\lib\tools.jar" com.sun.tools.javac.Main Demo.java
    • javac.exe Demo.java