执行引擎

解释器:加载快,执行慢
JIT编译器:对热点代码深度优化(编译后缓存在方法区),加载慢,执行快

缺省情况下HotSpot VM是采用解释器与即时编译器并存的架构,当然开发人员可以根据具体的应用场景,通过命令显式地为Java虚拟机指定在运行时到底是完全采用解释器执行,还是完全采用即时编译器执行。如下所示:
➢-Xint: 完全采用解释器模式执行程序;
➢-Xcomp: 完全采用即时编译器模式执行程序。如果即时编译出现问题,解释器会介入执行。
➢-Xmixed: 采用解释器+即时编译器的混合模式共同执行程序。

在HotSpot VM中内嵌有两个JIT编译器,分别为Client Compiler和Server Compiler,但大多数情况下我们简称为C1编译器和C2编译器。开发人员可以通过如下命令显式指定Java虚拟机在运行时到底使用哪-种即时编译器, 如下所示:
●-client:
指定Java虚拟机运行在Client模式下,并使用C1编译器;
➢C1编译器会对字节码进行简单和可靠的优化,耗时短。以达到更快的编译速度。
●-server: 指定Java虚拟机运行在Server模式下,并使用C2编译器。
➢C2进行耗时较长的优化,以及激进优化。但优化的代码执行效率更高。

为什么java程序第一次执行慢?
解释器解释class文件是可耗时的过程,而JAT编译是程序执行时才对热点代码探测并缓存,所以需要代码执行后才会更有效率

你可能感兴趣的:(JVM)