深入理解JVM的原理对于开发者性能调优、生产故障排查定位、合理分配内存资源至关重要,JVM也是面试高频考点,属于Java开发者必备技能,值得深入理解并总结成文。优秀的开发者具备体系化的知识网络,而不仅是碎片化的技术散点,本系列文章尝试将工作实践总结、JVM经典书籍中的知识点串联起来,其中包括JVM整体结构、内存管理、虚拟机参数配置、垃圾算法及收集器、类文件结构、类加载系统、字节码执行、并发优化、性能监控工具、调优实战几个部分,其中每部分都将以单独的文章描述,本文主要做整体性的介绍,明确系列文章的方向,文章主要参考周志明老师的《深入理解Java虚拟机》、葛一鸣老师的《实战Java虚拟机》,属于经典书籍的学习笔记,后续将持续更新。
一、JVM整体结构
宏观介绍JVM整体结构、简述类加载子系统、Java栈、方法区、Java堆、直接内存、本地方法栈、垃圾回收系统、PC寄存器、字节码执行引擎几个重要组成部分的功能与作用。
二、内存管理
- 运行时数据区域
- 方法区
- 堆区
- 直接内存
- 虚拟机栈
- 本地方法栈
- PC寄存器
三、虚拟机参数配置
- GC日志
- 类记载/卸载
- 系统参数
- 堆区配置
- 方法区配置
- 直接内存配置
- 栈配置
- 新生代配置
- 堆溢出异常处理
- JVM工作模式
四、垃圾回收算法及收集器
- 垃圾回收基础
- 基本概念
- 可达性
- 引用类型
- 垃圾回收算法
- 引用计数
- 标记清除
- 标记复制
- 标记整理
- 分代回收
- 垃圾回收器
- Serial
- ParNew
- Parallel Svavenge
- Serail Old
- CMS
- Garbage First
- 回收器选型
五、类文件结构
- Class文件结构
- 魔数
- 版本
- 常量池
- 访问标识
- 类、父类、接口
- Class字段
- Class方法
- 方法执行主体
- 字节码指令
- 字节码与数据类型
- 加载与存储指令
- 运算指令
- 类型转换指令
- 对象创建与访问指令
- 操作数栈管理指令
- 控制转移指令
- 方法调用和返回指令
- 异常处理指令
- 同步指令
六、类加载系统
- 类加载流程
- 加载
- 验证
- 准备
- 解析
- 初始化
- 双亲委派模型
- 自定义类加载器
七、字节码执行
- 运行时栈帧结构
- 方法执行
- 动态方法调用
- ASM
- Java Agent
八、并发优化
- 硬件基础
- 主内存与工作内存
- 并发特性
- 原子性
- 可见性
- 有序性
- volatile
- synchronized
- Lock
- 锁优化
- 自旋锁
- 自适应自旋
- 锁消除
- 锁粗化
- 轻量级锁
- 偏向锁
九、性能监控工具
- 常用命令
- top
- jps
- jinfo
- jmap
- jhat
- jstack
- 工具
- JConsole
- Visual VM
- Arthas
十、调优实战
- Tomcat垃圾回收性能调优
- 生产排查实战