java分为编译期和运行时
编译期:javac把java文件编译成.class字节码文件
运行时:类加载器加载字节码文件,解释或编译执行
关于解释或编译执行,热点代码在运行时通过JIT编译执行,其他非热点代码为解释执行。
JDK7开始,主流虚拟机采用混合模式。Server模式(服务器端应用)下的JVM,会进行上万次调用来收集信息进行高效编译,client模式(客户端应用如桌面应用)下的JVM,会进行1500次。HotSpot内置了两个不同的JIT compiler,C1 对应Client模式,适用于启动速度敏感的应用;C2对应Server模式,适用于长时间运行的服务端应用,默认采用分层编译(TieredCompilation)
混合模式:-XMixed 只解释执行:-Xint 关闭解释执行:-Xcomp
JDK9引入实验性的AOT(Ahead-of-Time Compilation) 编译方式,直接将字节码编译为机器代码。增加jaotc工具,利用下面命令把某个类或者模块编译为AOT库
jaotc --output libHelloWorld.so HelloWorld.class
jaotc --output libjava.base.so --module java.base
运行
java -XX:AOTLibrary=./libHelloWorld.so,./libjava.base.so HelloWorld
待完善。。。