JVM执行模式与即时编译(JIT)
参考:https://www.cnblogs.com/lyhero11/p/5080306.html;https://www.aliyun.com/jiaocheng/1331387.html;
JVM编译执行过程
执行模式
#查看虚拟机执行模式
java -version
#解释模式
-Xint
#编译模式
-Xcomp
#混合模式
-Xmixed
解释执行
翻译一句执行一句,不加筛选的将全部代码编译成机器码,不论其执行效率是否有编译价值。
.java----javac.exe编译器---->.class------java.exe解释执行器---->加载到JVM中执行
编译模式
混合模式
在翻译成.class时,经过JIT环境变量进行判断,是否属于“热点代码”(多次调用的方法,或循环等)。
如是,走JIT编译为具体硬件处理器(如sparc、intel)机器码。如否,则直接由解释器解释执行
编译方式
1、动态编译(dynamic compilation)指的是“在运行时进行编译”;与之相对的是事前编译(ahead-of-time compilation,简称AOT),也叫静态编译(static compilation)。
2、JIT编译(just-in-time compilation)狭义来说是当某段代码即将第一次被执行时进行编译,因而叫“即时编译”。JIT编译是动态编译的一种特例。JIT编译一词后来被泛化,时常与动态编译等价;但要注意广义与狭义的JIT编译所指的区别。
3、自适应动态编译(adaptive dynamic compilation)也是一种动态编译,但它通常执行的时机比JIT编译迟,先让程序“以某种式”先运行起来,收集一些信息之后再做动态编译。这样的编译可以更加优化。