JVM
java虚拟机即JVM运行字节码得虚拟机,JVM可以在不同得系统实现,使用相同字节码,运行都是相同得结果,即java得跨平台得原理
字节码
java中,JVM理解的代码叫做字节码,扩展名.class文件,只面向虚拟机,java语言通过字节码的方式,解决传统解释型语言执行效率低的问题,保留解释型语言的可移植性,所以java运行效率高,字节码针对的是JVM,即可跨平台运行同样的代码
JAVA程序源代码执行顺序
顺序图
.class通过JVM到机器码,JVM加载器先加载字节码文件,通过解释器逐行解释执行,执行速度较慢,方法和代码块需要被调用,就是所谓的热点代码,后面引进JIT编译器,JIT属于运行时编译,JIT编译器完成第一次编译,会将字节码对应的机器码保留下来,下次直接使用,机器码效率高于JAVA,这就是JAVA编译和解释共存的语言
HotSpot采用惰性评估做法,二八定律消耗大部分系统资源的只有小部分代码即热点代码,这就是JIT所需要执行次数越多,速度快的原因,JDK9引入一种编译模式,AOT,直接将字节码编译成机器码,比JIT预热的开销,JDK支持分层编译和AOT协作使用,但AOT编译质量不如JIT编译器