1.字节码文件的跨平台性
Java
语言是跨平台的语言,当java源代码编译成字节码后,如果想在不同的平台上运行,则无需再次编译。Java
虚拟机是跨语言的虚拟机。Java
虚拟机不和Java
语言进行绑定,无论用何种语言进行开发,只要能够将源文件编译成正确的Class
文件,那么这种语言就能够在Java虚拟机上面执行。例如,Kotlin
语言编写的程序,经过编译器编译成Class
文件之后,就能够在Java
虚拟机上面运行。
- 想要让
Java
程序正确的运行在JVM
中,Java
源码就必须被编译为符合JVM
规范的字节码。
这项工作由前端编译器完成。Javac
是一种常用的能够将Java
源码编译为字节码的前端编译器。
- 前端编译器和虚拟机是两部分,并不包含在虚拟机中。黄色部分是虚拟机相关的内容。
2.前端编译器(了解)
- 将
Java
源文件编译成字节码文件的编译器称为前端编译器,在执行引擎中的JIT
编译器称为后端编译器。
Hotspot VM
没有强制要求前端编译器只能使用javac
,只要编译结果符合JVM
规范都可以被JVM所识别。- 在前端编译器领域,除了
javac
之外,还有ECJ
(Eclipse Compiler for Java
)编译器。不同之处在于,javac
使用的是全量编译,每次编译都是编译所有的源代码;ECJ
使用的是增量编译,每次编译只是对未编译的部分进行编译。
更多JVM文章请访问我的JVM专栏:
https://blog.csdn.net/u011069294/category_10113093.html