深入理解JVM系列

深入理解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垃圾回收性能调优
  • 生产排查实战

猜你喜欢

转载自juejin.im/post/7040646879872778270