系列文章目录
第二章:JVM内存模型
第三章:多线程锁机制
第四章:spring boot自动配
第五章:spring cloud的分布式事务处理
文章目录
JVM深度解析:架构、内存模型与核心机制
一、JVM本质与核心价值
1. JVM定义
Java虚拟机(Java Virtual Machine) 是Java程序的运行环境核心,它构建在操作系统之上,通过抽象层屏蔽底层硬件差异,实现"一次编写,到处运行"的跨平台能力。
2. JVM核心优势
特性 | 描述 | 技术实现 |
---|---|---|
跨平台运行 | 字节码在不同操作系统上运行 | 平台特定的JVM实现 |
自动内存管理 | 开发者无需手动分配/释放内存 | 垃圾回收器(GC)机制 |
安全沙箱 | 防止非法内存访问 | 数组边界检查、内存隔离 |
面向对象支持 | 完整的多态、继承实现 | 类加载机制+字节码验证 |
异常处理 | 统一的错误处理机制 | 异常表+字节码指令 |
技术对比:
- JVM vs Docker:JVM是应用级虚拟化,Docker是系统级虚拟化
- JVM vs CLR:JVM运行Java字节码,CLR运行.NET IL代码
二、JVM核心架构解析
1. 类加载子系统(Class Loader)
加载流程:
类加载器层次:
- Bootstrap ClassLoader:加载JRE核心库(rt.jar)
- Extension ClassLoader:加载扩展库(jre/lib/ext)
- Application ClassLoader:加载应用程序类
- 自定义ClassLoader:实现特殊加载需求
2. JVM内存模型(核心组件)
内存区域详解
区域 | 存储内容 | 特性 | 异常 |
---|---|---|---|
方法区 | 类信息、常量、静态变量 | 线程共享 | OutOfMemoryError |
堆 | 对象实例、数组 | GC主战场 | OutOfMemoryError |
虚拟机栈 | 栈帧(局部变量表、操作数栈) | 线程私有 | StackOverflowError |
本地方法栈 | Native方法服务 | 线程私有 | StackOverflowError |
程序计数器 | 当前指令地址 | 线程私有 | 无 |
堆内存分代模型
新生代内部结构:
- Eden区(80%)
- Survivor0(10%)
- Survivor1(10%)
3. 执行引擎(Execution Engine)
核心组件:
- 解释器:逐条解释执行字节码
- JIT编译器:热点代码编译为本地机器码
- C1编译器:客户端模式,快速编译
- C2编译器:服务端模式,深度优化
- 垃圾收集器:
- Serial GC:单线程收集器
- Parallel GC:吞吐量优先
- CMS:低延迟收集器
- G1:分区收集器
- ZGC:超低延迟收集器
字节码执行流程:
.class文件 → 类加载 → 字节码验证 → 解释执行/JIT编译 → 本地代码执行
三、JVM技术全景图
学习路线建议
循序渐进学习路径:
Java基础阶段(当前阶段)
- 掌握语法核心
- 理解OOP思想
- 熟练使用集合框架
JVM入门阶段
- 理解内存模型
- 学习GC基本原理
- 掌握常用JVM参数
JVM进阶阶段
- 分析GC日志
- 使用JProfiler等工具
- 调优实战案例
底层机制探究
- 字节码指令解析
- 类加载机制实现
- JIT编译原理
学习箴言:
“不要试图一次性理解JVM的所有细节,先建立整体框架认知,再逐步深入各模块实现原理”