🚀 JVM架构全解析

Java源码
(.java文件)
编译器
(javac)
字节码
(.class文件)
JVM
(运行环境)
🔧 类加载器子系统 (Class Loader Subsystem)

启动类加载器

负责加载Java核心类库,如java.lang包中的类

扩展类加载器

加载扩展目录中的类库

应用类加载器

加载用户自定义的类

💾 运行时数据区 (Runtime Data Area)

方法区 (Method Area)

存储类信息、常量、静态变量等,所有线程共享

堆 (Heap)

存储对象实例,垃圾回收的主要区域,所有线程共享

Java栈 (Stack)

每个线程私有,存储局部变量和方法调用信息

程序计数器 (PC Register)

记录当前线程执行的字节码指令地址

本地方法栈

为本地方法(native方法)服务

⚙️ 执行引擎 (Execution Engine)

解释器

逐行解释执行字节码,启动快但执行慢

即时编译器(JIT)

将热点代码编译成机器码,提高执行效率

垃圾回收器

自动回收不再使用的内存对象

🔗 本地方法接口 (Native Method Interface)

JNI (Java Native Interface)

允许Java代码调用其他语言(如C/C++)编写的程序

本地方法库

存储本地方法的具体实现代码

🤔 小白友好解释

简单来说,JVM就像一个翻译官加管家:

1. 类加载器:像图书管理员,负责把需要的Java类"书籍"找出来放到合适的位置

2. 运行时数据区:像一个大仓库,有不同的区域存放不同的东西

• 堆:存放你new出来的所有对象

• 栈:存放方法中的局部变量

• 方法区:存放类的"说明书"

3. 执行引擎:真正的"工人",负责执行你的代码

4. 本地接口:与外界沟通的"翻译官",让Java能调用其他语言的代码

工作流程:你写的Java代码 → 编译成字节码 → JVM加载并执行 → 产生结果