JVM、JDK、JRE三者关系?
- JDK是Java开发工具包,是开发Java程序所需的工具集合。它包含了JVM、编译器(javac)、调试器(jdb)等开发工具,以及一系列的类库(如Java标准库和开发工具库)。JDK提供了开发、编译、调试和运行Java程序所需的全部工具和环境。
- JVM是Java虚拟机,是Java程序运行的环境。它负责将Java字节码(由Java编译器生成)解释或编译成机器码,并执行程序。JVM提供了内存管理、垃圾回收、安全性等功能,使得Java程序具备跨平台性。
- JRE是Java运行时环境,是Java程序运行所需的最小环境。它包含了JVM和一组Java类库,用于支持Java程序的执行。JRE不包含开发工具,只提供Java程序运行所需的运行环境。
为什么Java解释和编译都有?
(1) 前端编译(javac):将 .java
源码编译成 字节码(.class
文件
(2) 后端执行(JVM)
- 解释器(Interpreter):逐行解释字节码并执行,启动快但执行慢(适合冷代码)。
- JIT 编译器(Just-In-Time):运行时将热点代码(频繁执行的代码)直接编译为本地机器码,后续执行无需解释,大幅提升性能(如 HotSpot VM 的 C1/C2 编译器)。
JIT如何判断热点代码?:JVM中的一个方法调用计数器,当累计计数大于一定值时,就使用JIT进行编译生成机器码文件。