compile once,run anywhere
编译一次,到处运行;指的是Java语言的跨平台能力,而这种能力主要由Java虚拟机提供的,那Java语言从源代码到可以执行的机器码是怎样编译、运行的呢?Java源代码经过javac编译后生成屏蔽操作系统和硬件的字节码,再经由JVM编译、解释执行。
Java语言对字节码文件提供了三种执行方式:
- 解释执行,逐条代码边翻译边执行
- 编译执行(动态编译),由JIT(存在于JVM中,Java in time,Java即时编译器)将热点代码(使用频率高的代码)编译为机器码
- AOT二次编译,先形成静态的二进制文件,运行时指定该静态文件,需要手动指定,利用jaotc工具可以实现静态编译
通过指定参数选择Java字节码的执行方式:
- java -Xmixed参数,编译和解释执行混合执行的方式,默认方式
- java -Xint,解释(interpret)执行
- java -Xcomp 编译(compile)执行
- jaotc工具指定静态编译模块,待运行时加载该模块即可