JVM 内存与垃圾回收篇概述
这套文档讲什么
这是一份关于 JVM(Java Virtual Machine) 的系统性教程,从最基础的概念出发,一路延伸到生产级别的性能调优。
JVM 是 Java 技术栈的核心底层。不管你用的是 Spring Boot 还是 MyBatis,不管你写的是 CRUD 还是分布式架构,最终代码都要跑在 JVM 上。理解它,才能真正掌握 Java。
本篇聚焦于两个核心主题:内存结构 与 垃圾回收(GC)。这两个话题几乎占据了 JVM 面试 80% 的内容,也是线上调优的主战场。
内容全景图
先给你一个整体印象,这套文档是怎么组织的:
JVM 基础认知
├── 认识 JVM:是什么、在哪、怎么跑
├── 跨平台与字节码:Java 为何能「一次编写,到处运行」
└── 主流虚拟机:不止 HotSpot
运行时数据区(内存结构)
├── 类加载器:类是怎么被加载进来的
├── 线程私有区:PC 寄存器、虚拟机栈、本地方法栈
├── 线程共享区:堆、方法区
└── 对象实例化:一个 new 到底经历了什么
执行引擎与核心专题
├── 执行引擎:解释执行 vs JIT 编译
└── String 专题:那些你一直搞混的字符串问题
垃圾回收(GC)核心
├── GC 基础理论:算法、原理、核心概念
├── 垃圾回收器:Serial、G1、ZGC...
└── GC 日志分析:如何读懂 GC 日志
字节码与类加载深度剖析
├── Class 文件结构:字节码里到底有什么
├── 字节码指令集:JVM 是怎么执行代码的
└── 类加载深度剖析:双亲委派、命名空间...
性能监控与调优
├── 监控工具:jps、jstat、Arthas...
└── JVM 参数与调优实战你会学到什么
学完这套文档,你将能够:
- 说清楚 JVM 的整体架构:从
.java文件到bytecode,再到 ClassLoader、执行引擎、运行时数据区,每个模块各司其职 - 掌握内存区域的核心原理:堆和非堆怎么划分、对象在内存中怎么流转、逃逸分析是什么
- 理解 GC 的底层逻辑:哪些算法各有优劣、主流回收器怎么配合工作、G1 的 Region 是什么
- 具备生产调优能力:能读 GC 日志、会用 Arthas 排查问题、能根据业务场景配置 JVM 参数
适用人群
- 想深入理解 Java 的开发者:不只是会用框架,想知道底层怎么运作
- 准备面试的工程师:JVM 是 Java 后端面试的必考内容
- 排查线上问题的运维/开发:服务器 OOM、GC 频繁、接口超时,需要从 JVM 层面分析
- 想提升技术深度的任何人:技术这条路,越往底层走,越扎实
学习路径建议
如果你是初学者,建议按文档顺序阅读。但如果时间紧张,可以优先看这几篇:
- JVM 的位置与整体结构 —— 建立全局视图
- Java 代码执行流程 —— 知道代码是怎么跑起来的
- 堆空间概述 —— 面试最高频的区域
- GC 核心概念 —— GC 必知的基础概念
前置知识
阅读本模块,你需要:
- 熟悉 Java 基础语法:能写简单的 Java 程序
- 了解操作系统基本概念:进程、内存、CPU 等基础术语
- 会使用命令行:能够用
javac和java命令编译运行程序
如果这些还不熟悉,先去 Java 基础模块 补一补,再回来学 JVM 会更顺畅。
关于版本
本教程以 JDK 17 LTS 为主,部分内容会对比 JDK 8 和 JDK 11 的差异。JVM 在演进,但核心原理变化不大,理解底层逻辑比死记某个版本特性更重要。
准备好了?让我们从 Java 上层技术与 JVM 的关系 开始,正式进入 JVM 的世界。
