vlambda博客
学习文章列表

你了解JVM如何执行字节码文件的吗?

     在市场上主流的JVM(HotSpot)中提供了两种字节码的执行方式,一种为直接解释执行,一种为JIT编译执行。如图-1所示:

图-1

     在图-1中的热点代码,一般泛指执行频度比较高的代码块或方法。这样的代码可以在执行时通过编译执行器,先将字节码解释为二进制机器码进行缓存,然后执行时从缓存中进行反复获取执行即可,这也就是所谓的即时编译(Just-In-Time compilation,JIT)。通过这种方式以提高代码的执行效率。

      为什么JVM中解释执行与编译执行并存呢(混合模式)?

      解释器与编译器两者各有优势,当程序需要迅速启动和执行的时候,解释器可以首先发挥作用,省去编译的时间,立即执行。在程序运行后,随着时间的推移,即时编译(JIT)逐渐发挥作用,它可以对反复执行的热点代码以方法为单位进行即时编译,可以获取更高的执行效率。但是如果JIT对每条字节码都进行编译,缓存(缓存的指令是有限的),会增加开销。所以当程序运行环境中内存资源限制较大(如部分嵌入式系统中),可以使用解释器执行节约内存,反之可以使用编译执行来提升效率。