1. JVM(Java Virtual Machine,Java 虚拟机)
详细定义
JVM 是 Java 平台无关性(跨平台)的核心。它将编译过的 Java 字节码(.class 文件)解释或即时编译成特定平台的机器码,并执行这些机器码。
主要功能和组件
-
类加载器(Class Loader):负责将字节码文件(.class 文件)加载到 JVM 中。
- 启动类加载器(Bootstrap ClassLoader):加载 JDK 核心类库(rt.jar)。
- 扩展类加载器(Extension ClassLoader):加载扩展类库(ext 目录下的类库)。
- 应用程序类加载器(Application ClassLoader):加载用户类路径(classpath)下的类。
-
内存管理:
- 堆(Heap):存储对象实例。
- 栈(Stack):存储方法调用和本地变量,每个线程都有自己的栈。
- 方法区(Method Area):存储类结构、常量池、方法数据和方法代码。
- 程序计数器(Program Counter Register):记录当前线程执行的字节码行号。
- 本地方法栈(Native Method Stack):为本地方法服务。
-
执行引擎:
- 解释器(Interpreter):将字节码逐行解释为机器码执行。
- 即时编译器(JIT Compiler):将热点代码编译为机器码以提高执行效率。
-
垃圾回收(Garbage Collection):
- 自动内存管理,回收不再使用的对象。
- GC 算法:标记-清除算法、复制算法、标记-压缩算法等。
- GC 垃圾收集器:如 Serial、Parallel、CMS、G1 等。
2. JRE(Java Runtime Environment,Java 运行环境)
详细定义
JRE 是一个软件包,提供了运行 Java 应用程序所需的基础环境。它包括 JVM 和标准类库,但不包括开发工具(如编译器)。
组成部分
-
JVM:见上文详细定义。
-
Java 核心类库(Core Libraries):提供基本的编程功能,如:
- Java.lang:提供基础类如 Object、String、Math 等。
- Java.util:提供集合框架(List、Set、Map)、日期时间 API 等。
- Java.io 和 Java.nio:提供输入输出功能。
- Java.net:提供网络功能。
-
Java 标准类库:包括一些常用工具类和 API。
-
其他文件:如配置文件(properties)、本地库(native libraries)。
3. JDK(Java Development Kit,Java 开发工具包)
详细定义
JDK 是 Java 开发人员用来编写、编译和调试 Java 程序的工具包。它包含了 JRE 和开发工具。
组成部分
- JRE:见上文详细定义。
- 开发工具:
- 编译器(javac):将 Java 源代码(.java 文件)编译成字节码(.class 文件)。
- 调试器(jdb):用于调试 Java 应用程序。
- 文档生成器(javadoc):从 Java 源代码注释中生成 API 文档。
- 打包工具(jar):用于创建和管理 Java 档案(JAR)文件。
- 其他工具:如
javap
(字节码分析工具)、jconsole
(监视和管理工具)、jvisualvm
(性能监视和调试工具)等。
开发过程
- 编写代码:开发人员使用文本编辑器或 IDE 编写 Java 源代码(.java 文件)。
- 编译代码:使用
javac
编译器将源代码编译成字节码(.class 文件)。 - 运行代码:使用
java
命令运行编译好的字节码。JVM 将字节码解释或编译为机器码并执行。
包含关系和图示
- JVM 是 JRE 的一部分,负责执行 Java 字节码。
- JRE 包含 JVM 和 Java 核心类库,是运行 Java 程序的基本环境。
- JDK 包含 JRE 和开发工具,是开发 Java 应用程序的完整工具包。
JDK
├── JRE
│ ├── JVM
│ │ ├── 类加载器
│ │ ├── 内存管理
│ │ ├── 执行引擎
│ │ ├── 垃圾回收
│ ├── 核心类库
│ └── 其他文件
├── 编译器(javac)
├── 调试器(jdb)
├── 文档生成器(javadoc)
├── 打包工具(jar)
└── 其他工具
结论
JVM 是运行 Java 程序的核心,提供了跨平台的运行环境。JRE 包含了 JVM 和必要的类库,是运行 Java 程序的环境。JDK 则是开发 Java 程序所需的工具包,包含了 JRE 以及编译器、调试器等开发工具。这三个组件共同构成了 Java 的开发和运行体系。