结论:Java 即是编译性语言也是解释性语言。
编译:将 *.java 文件编译成 *.class 字节码文件。
解释:JVM 加载 *.class 字节码文件,然后通过解释器逐行解释为机器码执行。
JIT:解释器逐行解释并运行效率相对较低,JVM 可以将热点代码编译成机器码并保存下来,下次调用直接调用执行机器码,在一定程度上提高运行效率。
注:常见的 HotSpot 采用惰性评估的方式,在某些代码在某段时间内达到一定的执行次数后才会及时编译为机器码。JVM 也会根据每次被执行的情况收集信息并做出一些优化,所以有些代码执行的次数越多,它运行的速度越快,所以在某些系统上线后需要通过预热来提高代码的运行效率。JDK 9 还引入一种新的编译模式 AOT(Ahead of Time Compilation) 它是直接将字节码编译成机器码,避免了 JIT 预热等各方面的开销。JDK 支持分层编译和 AOT 协作使用,但是 AOT 编译器的编译质量肯定是比不上 JIT 编译器的。
Java是编译性语言还是解释性语言
于 2022-02-03 22:10:21 首次发布