JVM详解

四大核心部分

1. 类加载子系统 (Class Loader Subsystem)

这是 JVM 的"入口",负责将静态的 .class 文件加载到内存中。

  • 核心职责:负责加载、链接(验证、准备、解析)和初始化类文件。
  • 工作机制 :它通过双亲委派模型(Parent Delegation Model)来确保类加载的安全性和唯一性,防止核心 API 被篡改。
  • 执行者- 类加载器:是 JVM 类加载子系统(Class Loading Subsystem) 的核心执行者

2. 运行时数据区 (Runtime Data Area 极其重要)

线程私有区域

程序计数器 :记录当前线程执行的字节码行号,是唯一没有规定内存溢出的区域。

虚拟机栈:描述 Java 方法执行的内存模型,存储局部变量、操作数栈等(栈帧)。包含:

 局部变量表、

 操作数栈(用于临时存放中间数据,具体执行还是需要cpu)、

 指向运行时常量池的引用、

 方法返回地址(返回下一条要执行的指令地址)、

 动态连接(编译之后有很多符号引用)
栈侦详解

设置栈大小:(通常不会手动的设置)

-Xss1m (默认) (重要)

复制代码
本地方法栈 :为 Native 方法(C/C++ 编写)服务。
线程共享区域

堆 (Heap):存放对象实例数组,是垃圾回收(GC)的要区域。

复制代码
**[堆对象的结构](https://blog.csdn.net/a308495564s/article/details/119521487):** 对象头、对象体、对齐字节。
java 复制代码
// 堆溢出OOM (visual GC工具)
	public static void main(String[] args) {
			List<String> list =  new ArrayList<>();
//死循环
			for (int i = 0; ; i++)  {		
				System.out.println("execute... ..."+i);	
				list.add(new String(new byte[1024*1024*100]));
			}
		}

堆分类
堆: heap, 年轻代+老年代
非堆: non-heap , jvm除了heap以外的内存区域
离堆: off-heap , jvm外的内存区域(物理内存,本地计算机内存)

  • 方法区 (Method Area / Metaspace)

JDK 6 及以前 :静态变量和字符串常量池都在永久代(堆内 受制于-xmx)。
JDK 7: 静态变量和字符串常量池被迁移到Java 堆(就是常说的堆区)。永久代只剩下类元数据。
JDK 8 及以后:类元数据被迁移到元空间(堆外,而静态变量和字符串常量 池依然留在Java 堆。
注意: 字符串常量池在堆区,运行时常量池在元空间。

3. 执行引擎 (Execution Engine)

这是 JVM 的"大脑",负责执行字节码指令。

  • 解释器 (Interpreter):逐行读取并解释字节码,启动速度快,但执行效率相对较低。
  • 即时编译器 (JIT Compiler):将频繁执行的"热点代码"编译成本地机器码并缓存,大幅提升运行效率。
  • 垃圾回收器 (Garbage Collector, GC):架构上它属于执行引擎的一部分,负责自动回收堆内存中不再使用的对象。

4. 本地方法接口 (Native Interface / JNI)

这是 JVM 与外部世界交互的"桥梁"。

  • 作用:融合不同的编程语言。当 Java 代码需要调用非 Java 语言(如 C、C++)编写的本地库时,通过 JNI 进行交互。
  • 本地方法库:JNI 调用底层的本地方法库(如操作系统层面的文件 IO、网络通信库)。

5.图示总结

相关推荐
HwJack2013 小时前
Flask+SQLite简易后端数据存储实现原理
jvm·sqlite·flask
Dicky-_-zhang13 小时前
Redis集群模式详解与实战配置
java·jvm
Kiling_070414 小时前
面向对象和集合编程题 ( 一 )
jvm·windows
上弦月-编程14 小时前
Java类与对象:编程核心解密
java·开发语言·jvm
Dicky-_-zhang14 小时前
线上故障排查与应急响应实战:从零开始建立你的SRE体系
java·jvm
大大杰哥14 小时前
从 Volatile 到 ThreadLocal:Java 线程安全机制备忘
java·开发语言·jvm
AI人工智能+电脑小能手14 小时前
【大白话说Java面试题 第67题】【JVM篇】第27题:生产环境服务器变慢,诊断思路和性能评估谈谈?
java·服务器·jvm·面试
Dicky-_-zhang15 小时前
服务网格Istio mTLS配置实战
java·jvm
Dicky-_-zhang15 小时前
服务网格实战:Istio与Linkerd对比选型与落地实践
java·jvm
存在的五月雨15 小时前
JVM 入门学习笔记(内存模型 / GC / 类加载机制)
jvm·笔记·学习