JVM、JRE、JDK关系。HotSpot。JVM规范
三者关系
总结
- JDK=JRE+Java开发工具(编写、编译javac、调试debug、运行等)。Java开发工具包。
- JRE=JVM+Java核心类库。Java运行时环境。
- JVM负责将Java字节码加载到内存。负责解释或编译成机器码,并提供内存管理、垃圾回收等功能。Java运行的基础。
1. JVM(Java Virtual Machine)
- 定义:JVM是Java虚拟机,它是Java程序运行的基础。JVM负责将Java字节码解释或编译成机器码,并提供内存管理、垃圾回收、线程管理等功能。
- 作用:JVM是Java跨平台的关键,因为它可以在不同的操作系统上运行Java程序,实现“一次编写,到处运行”的跨平台特性。
- 组成:虽然JVM的具体实现可能因供应商和版本而异,但通常包括类加载器、运行时数据区、执行引擎等部分。
HotSpot是JVM的一种实现。Hotspot是Oracle公司开发的一种广泛使用的JVM实现。它以其性能优化技术而闻名,包括即时编译(JIT)编译器和多种垃圾回收算法。
2. JRE(Java Runtime Environment)
- 定义:JRE是Java运行时环境,它包含了Java虚拟机(JVM)以及运行Java程序所需的核心类库和支持文件。
- 作用:JRE是运行Java程序所必需的环境的集合,普通用户只需要安装JRE就可以运行已经编译好的Java程序。
- 组成:JRE主要由JVM和Java核心类库组成。在JRE目录下,通常会包含
bin
(包含JVM执行器)和lib
(包含Java核心类库)等文件夹。
3. JDK(Java Development Kit)
- 定义:JDK是Java开发工具包,它包含了Java编译器(javac)、Java运行时环境(JRE)以及Java开发工具(如调试器和监控工具)等。
- 作用:JDK是Java程序开发的核心,它提供了编写、编译、调试和运行Java程序所需的所有工具。开发人员需要使用JDK来开发Java程序。
- 组成:JDK包含了JRE的所有内容,并增加了Java编译器和其他开发工具。在JDK的安装目录下,可以找到
bin
(包含编译工具javac、执行工具java等)、lib
(包含Java类库)、jre
(包含JRE的完整内容)等文件夹。
JDK
为Java程序的编写、编译、调试和运行提供了全面的支持
1. 编写Java程序
编写Java程序是指使用文本编辑器(如Notepad++、Sublime Text、IntelliJ IDEA、Eclipse等)或集成开发环境(IDE)来创建Java源代码文件(.java文件)。这些文件包含了Java代码,即使用Java语言编写的指令和声明。编写Java程序是软件开发过程的第一步,它涉及到根据需求设计程序结构、编写类、方法、变量等。
2. 编译Java程序
编译Java程序是指使用JDK中的javac编译器将Java源代码文件(.java文件)转换成Java字节码文件(.class文件)。这个过程称为编译。Java字节码是一种与平台无关的二进制代码,它可以在任何安装了Java虚拟机(JVM)的计算机上运行。编译是Java程序从源代码到可执行代码的关键步骤,它确保了代码符合Java语言的语法规则,并准备在JVM上执行。
3. 调试Java程序
调试Java程序是指在程序运行过程中查找并修复错误的过程。调试是软件开发中不可或缺的一部分,它帮助开发人员理解程序的行为,并找出导致程序不按预期运行的原因。JDK提供了多种调试工具,如JDB(Java Debugger)、VisualVM、Eclipse和IntelliJ IDEA等IDE内置的调试器等。调试过程通常包括设置断点、观察变量值、单步执行代码等,以便逐步跟踪程序的执行流程并定位问题所在。
4. 运行Java程序
运行Java程序是指使用JDK中的java命令(实际上是启动JVM)来执行编译后生成的Java字节码文件(.class文件)。当java命令被执行时,JVM会加载指定的类文件,并将其中的字节码转换成当前操作系统能够理解的机器码,然后执行这些机器码。运行Java程序是软件开发过程的最后一步,它验证了程序的正确性和可用性。
HotSpot
HotSpot是JVM的一种实现。Hotspot是Oracle公司开发的一种广泛使用的JVM实现。它以其性能优化技术而闻名,包括即时编译(JIT)编译器和多种垃圾回收算法。
JVM规范
JVM规范(Java Virtual Machine Specification)是由Oracle(或其前身Sun Microsystems)制定并发布的,它详细定义了JVM的行为、功能和要求,为JVM的实现者提供了一个公共的、标准化的视图。JVM规范的主要目的是确保不同的JVM实现在语义和行为上保持一致,从而实现Java程序的可移植性。具体来说,JVM规范规范了以下几个方面:
-
类文件格式:定义了Java类文件的格式,包括如何组织类的元数据、方法、字段等信息。这是JVM加载和执行Java程序的基础。
-
字节码指令集:规定了JVM能够识别的字节码指令集,这些指令是Java程序编译后的产物,JVM通过执行这些指令来运行Java程序。
-
运行时数据区域:描述了JVM在执行Java程序时使用的各种运行时数据区域,如方法区、堆、栈等,以及这些区域的作用和管理方式。
-
垃圾回收:规定了JVM中垃圾回收的行为和策略,包括如何识别垃圾对象、何时进行垃圾回收、采用何种回收算法等。
-
异常处理:定义了Java程序中异常的处理机制,包括异常的抛出、捕获和处理过程。
-
线程管理:描述了JVM中线程的创建、调度、同步和销毁等管理行为。
-
其他与Java程序执行相关的细节:如类加载机制、安全模型、本地方法接口(JNI)等。
JVM规范的制定和发布,为Java语言的跨平台性提供了坚实的基础。通过遵循JVM规范,不同的JVM实现可以在不同的操作系统和硬件平台上运行相同的Java程序,而无需对程序本身进行修改。这极大地简化了Java程序的开发和部署过程,降低了开发成本,提高了开发效率。
需要注意的是,JVM规范是一个不断发展的标准,随着Java语言的不断演进和新技术的出现,JVM规范也会不断更新和完善。因此,开发者需要关注JVM规范的最新动态,以便更好地利用Java语言进行开发。