java虚拟机(JVM,java virtual machine)负责java源文件的解释执行或者编译执行。
-
首先,静态编译器将java源文件(.java文件)编译成字节码(.class文件),java源文件->词法解析->语法解析->语法分析->生成字节码->字节码;
-
字节码文件需要被“类加载过程”加载到JVM环境后,才可以执行,执行方式有下面几种:
(1)解释执行:解释器在运行时将代码逐行翻译成机器码,交给机器执行;
(2)JIT(Just In Time,即时编译器)编译执行:以方法为单位,动态的将经常运行的代码编译成本地平台相关的机器码,直接交给CPU执行;
(3)解释执行和JIT编译执行混合方式执行(主流的JVM默认执行方式);
(4)AOP编译器:jdk9提供的直接将所有的代码编译成机器码执行。 -
混合执行的优势:解释器在启动的时候先进行解释执行,先不编译,省去编译的时间,随着时间的推进,JVM通过热点代码的统计分析,识别高频的方法调用、循环体、公共模块等,JIT将热点代码转化为机器码,直接交给CPU执行,提高执行效率。
-
解释执行和编译执行的区别:打个比方,解释执行类似于同生传译,编译执行类似于放录音,解释执行解释一行执行一行,编译执行以方法为单位,转换为机器码,然后整块传给CPU执行。
本文提到的“类加载过程”,将另开一个笔记。