JVM-基础概念
1. 内容大纲
2. JVM 解决了什么问题?
JVM(Java Virtual Machine)解决的核心问题之一就是跨平台性,只需要写一份代码即可运行在多个操作系统上。
如下图所示,首先我们将编写好的 .java
文件通过 javac
编译为 .class
字节码文件,然后通过 JVM
解释为操作系统能够识别的机器码语言。
3. JVM 是什么?
JVM(Java Virtual Machine)
:全称为 Java虚拟机
,JVM主要的作用就是将 Java
程序编译成的 字节码文件
解释或编译为操作系统能够识别的 机器码指令
。
4. JVM 核心功能
字节码执行:JVM负责解释或编译Java程序编译生成的字节码,并将其转换为本地机器码执行。
内存管理:JVM负责管理Java程序的内存分配和释放。
- C内存管理示例
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19#include <stdio.h>
#include <stdlib.h>
int main() {
// 使用malloc动态分配内存
int *ptr = (int *)malloc(sizeof(int));
if (ptr == NULL) {
printf("内存分配失败\n");
return 1;
}
*ptr = 5;
printf("指针所指向的值为: %d\n", *ptr);
// 释放动态分配的内存
free(ptr);
return 0;
}- Java内存管理示例:
1
2
3
4
5
6
7
8
9public class MemoryManagementExample {
public static void main(String[] args) {
// 使用Java的自动内存管理机制
Integer number = new Integer(5);
System.out.println("对象的值为: " + number);
// Java的垃圾回收器会自动回收不再使用的对象所占用的内存
}
}即时编译:JVM中包含即时编译器(Just-In-Time Compiler,JIT Compiler),它能够将字节码动态编译成本地机器码,以提高程序的执行效率。
5. JVM 的组成
Java虚拟机(JVM)是一个复杂的系统,由多个组件组成,主要包括以下几个部分:
- 类加载器子系统(Class Loader Subsystem):
- 核心功能:负责加载Class文件,将其转换为JVM内部表示的对象,并加载到内存中。
- 组成部分:启动类加载器(Bootstrap Class Loader)、扩展类加载器(Extension Class Loader)和 应用程序类加载器(Application Class Loader)
- 运行时数据区(Runtime Data Area)
- 核心功能:JVM内存管理的主要区域,比如对象的创建和销毁。
- 组成部分:方法区(Method Area)、堆(Heap)、虚拟机栈(Java Virtual Machine Stacks)、本地方法栈(Native Method Stack)
- 方法区(Method Area):存储类的结构信息、静态变量、常量、方法字节码等数据。
- 堆(Heap):存储所有对象实例以及数组对象。
- 虚拟机栈(Java Virtual Machine Stacks):存储线程的方法调用栈、局部变量等信息。
- 本地方法栈(Native Method Stack):与虚拟机栈类似,但是用于执行本地方法。
- 执行引擎(Execution Engine)
- 核心功能:负责执行JVM加载的字节码,同时使用即时编译优化性能。
- 组成部分:解释器(Interpreter)和 即时编译器(Just-In-Time Compiler,JIT Compiler)。
- 解释器(Interpreter):逐条解释字节码并执行。
- 即时编译器(Just-In-Time Compiler,JIT Compiler):将字节码编译成本地机器码以提高执行效率。
- 本地方法接口(Native Interface)
- 核心功能:允许Java应用程序调用本地方法(Native Method),即使用C或C++等编程语言编写的方法。
具体 JVM 组成如下图所示
6. JDK、JRE、JVM 有什么区别
JDK(Java Development Kit)
JDK
包含了完整的Java
运行环境(JRE
)JDK
是Java
开发工具包,提供了用于开发Java
应用程序的工具和资源,包括编译器(javac
)、运行时库(Java
标准库)、调试器(jdb
)、文档生成工具(javadoc
)等。
JRE(Java Runtime Environment)
JRE
是Java
运行时环境,包含了Java
程序运行所需的核心类库、Java
虚拟机(JVM
)和其他运行时所需的支持文件。
JVM(Java Virtual Machine)
JVM
是Java
虚拟机,是Java
程序的运行环境,负责解释和执行Java
程序编译生成的字节码。JVM
提供了内存管理、线程管理、安全检查、即时编译等功能,使得Java
程序能够在不同的操作系统和硬件平台上运行,实现了Java
的跨平台性。
JDK
包含了 JRE
以及用于开发 Java
应用程序的工具,而JRE包含了 JVM
以及运行 Java
程序所需的核心类库。
7. 参考博文
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Wickson Blog!
评论