什么是 JVM?

JVM 就是一个虚拟机(或者说就是一个程序),用来解释和运行编译好的 .class 字节码文件。

因为字节码文件不能直接执行,因此需要 JVM 虚拟机将字节码解释成机器码并运行。

同时,JVM 还能够自动分配内存和垃圾回收,同时还能够对热点代码进行优化,即时编译,提高运行效率。

为什么 Java 代码不能像 C++ 一样直接编译好就能运行?

主要是为了支持跨平台特性,「一次编译,到处运行」

即时编译的原理

Untitled

Java 统计代码中的热点代码,将字节码解释为机器码并保存到内存,下次运行的时候直接调用就可以了。

扩展:Java 虚拟机规范

《Java虚拟机规范》由 Oracle 制定,内容主要包含了 Java 虚拟机在设计和实现时需要遵守的规范,主要包含class字节码文件的定义、类和接口的加载和初始化、指令集等内容。

《Java 虚拟机规范》是对虚拟机设计的要求,而不是对 Java 设计的要求,也就是说虚拟机可以运行在其他的语言比如 Groovy、Scala 生成的 class 字节码文件之上。

常见的 JVM

Untitled

Untitled