JVM中的解释和编译过程

127 阅读2分钟

1.概述

一般来说,计算机语言是包括高级语言、汇编语言、机器语言。对于汇编语言来说,汇编语言会直接翻译成机器语言供给CPU去执行;对于高级语言来说,也会先翻译成汇编语言然后在翻译成机器语言以供给CPU去执行。平时所接触的编译过程指的是高级语言翻译成汇编语言的过程。

2.JVM的前置编译

在JVM中,前置编译器指的是javac这个命令,把.java文件翻译成.class文件。但是需要注意的是,这并不是普通意义上的编译过程,因为这个.class文件里面的指令并不是类似于汇编语言那样,接近于底层的指令集。这样做的目的只是为了实现一次打包,处处运行。意思其实是说,只要把这个.java文件编译成.class文件。那么这个.class里面所包含的指令集可以在windows,linux,mac系统上的JVM虚拟机上处处进行下一步的“翻译”过程。其实也可以不用先编译成.class文件再进行“翻译”运行,主要是这样的做法个人认为是省时,减少JVM的执行负担。
其实我们平时见到的jar文件就是一系列.class文件的集合。“一次编译,处处运行”。

3.JVM的解释器

JVM的解释器其实是逐行翻译Java字节码指令,把这个指令翻译成底层的机器码然后继续执行。而这个JIT编译器就是把个JVM字节码指令直接翻译成机器码指令,使得可以更加高效地执行程序。同时将这个机器码指令存储到方法区中,以便下次运行相同程序片段的时候,可以直接拿来运行,进一步减少了编译过程产生的开销。JVM解释器和JIT编译器共同组成了JVM的执行引擎。