编译器和解释器
java代码是编译成字节码文件后,由JVM加载到内存后执行的。但是,对于windows和linux操作系统来说,可以执行的文件类型是exe和elf,字节码文件并不能直接执行,所以,JVM中有一个解释器,将字节码文件中的内容一边解释成操作系统可以执行的指令,一边执行,可想而知,这与操作系统的可执行文件执行过程相比,效率要低。
为了提高java代码的执行效率,JVM中有一个JIT(即时编译器),它的作用是将频繁执行的java代码编译成操作系统可执行文件内容存在内存中,等下次再执行这块代码时,不用解释器了,直接将编译好的可执行文件内容拿来执行。可想而知,这样的执行效率要高很多。
JVM在执行java代码中有三种模式:混合模式、纯解释模式和纯编译模式。在默认情况下使用的是混合模式。
混合模式,顾名思义,解释器和JIT都会工作,工作机制也是上面提到的。纯解释模式是只有解释器在工作,这种模式下,java进程启动速度会很快,但是执行速度比另外两种模式慢。纯编译模式是只有JIT在工作,这种模式下,java进程启动速度会比另外两种模式慢,但是执行速度最快。
JVM的模式配置:
-Xmixed:混合模式
-Xint:纯解释模式
-Xcomp:纯编译模式