⑥. HotSpot VM 可以设置程序执行方式
①. 缺省情况下HotSpot VM是采用解释器与即时编译器并存的架构,当然开发人员可以根据具体的应用场景,通过命令显式地为Java虚拟机指定在运行时到底是完全采用解释器执行,还是完全采用即时编译器执行。如下所示:
- ②.-Xint:完全采用解释器模式执行程序;
- ③.-Xcomp:完全采用即时编译器模式执行程序。如果即时编译出现问题,解释器会介入执行
- ④.-Xmixed:采用解释器+即时编译器的混合模式共同执行程序。
⑦. HotSpot VM中的JIT分类
①. 在HotSpot VM中内嵌有两个JIT编译器,分别为Client Compiler和Server
Compiler,但大多数情况下我们简称为C1编译器和C2编译器。开发人员可以通过如下命.令显式指定Java虚拟机在运行时到底使用哪一种即时编译器,如下所示:
②. C1和C2编译器不同的优化策略:
- ③. 总结
- 一般来讲,JIT编译出来的机器码性能比解释器高。
- C2编译器启动时长比C1编译器慢,系统稳定执行以后,C2编译器执行速度远远快于C1编译器。
⑧. AOT编译器
①. jdk9引入了AOT编译器(静态提前编译器,Ahead Of Time Compiler)
②.所谓AOT编译,是与即时编译相对立的一个概念
即时编译指的是在程序的运行过程中,将字节码转换为可在硬件上直接运行的机器码,并部署至托管环境中的过程。而 AOT 编译指的则是,在程序运行之前,便将字节码转换为机器码的过程 .java -> .class -> .so
③. 最大好处:Java虚拟机加载已经预编译成二进制库,可以直接执行。不必等待即时编译器的预热,减少Java应用给人带来“第一次运行慢”的不良体验
④. 缺点
破坏了java"一次编译,到处运行",必须为每个不同硬件、OS编译对应的发行包。
降低了Java链接过程的动态性,加载的代码在编译期就必须全部已知