JVM 面试突击
🔬 JVM 面试突击:运行时数据区、类加载、GC 与调优全解析 📌 前置知识:阅读本文需要具备 Java 基础语法知识、对 JVM 有初步概念(知道 JVM 是运行 Java 程序的虚拟机即可)。本文定位为面试突击速查手册,每个考点都按"面试怎么答"组织,命令部分附带完整的操作步骤和输出解读。 各模块面试频率参考 在开始具体考点之前,先了解各模块的面试出现频率,有助于合理分配复习时间: 模块 面试频率 关键程度 运行时数据区 ⭐⭐⭐⭐⭐ 每场必问,入门级考点 类加载机制 ⭐⭐⭐⭐⭐ 双亲委派模型高频出现 垃圾回收机制 ⭐⭐⭐⭐⭐ 区分候选人水平的关键 调优工具与实战 ⭐⭐⭐⭐ 考察实际动手能力 JMM + volatile ⭐⭐⭐⭐⭐ 并发底层原理 经典面试题 ⭐⭐⭐⭐ 综合应用能力 📌 一、JVM 运行时数据区:内存布局与职责 🧠 1.1 JVM 内存布局全景图 这是面试最常考的入门题,必须清楚每个区域的功能、是否为线程共享,以及各自可能抛出的异常。下面先用 Mermaid 展示 JVM 内存区域的整体分类: flowchart LR JVM(["🔷 JVM 运行时数据区"]) JVM --> SHARED["👥 线程共享区"] JVM --> PRIVATE["🔒 线程私有区"] SHARED --> HEAP["📦 Java堆\n对象实例 / 数组\nGC 主要区域"] SHARED --> METHOD["📋 方法区\n类信息 / 常量 / 静态变量\nJDK8+ 元空间实现"] PRIVATE --> PC["📍 程序计数器\n字节码行号指示器\n无OOM"] PRIVATE --> VMSTACK["📚 虚拟机栈\n栈帧: 局部变量表+操作数栈+动态链接\nStackOverflowError / OOM"] PRIVATE --> NATIVE["🔧 本地方法栈\nnative 方法服务\nStackOverflowError / OOM"] classDef root fill:#0f172a,stroke:#3b82f6,stroke-width:2px,color:#bfdbfe,font-weight:bold; classDef branch fill:#2d1a05,stroke:#f59e0b,stroke-width:2px,color:#fde68a,font-weight:bold; classDef leaf fill:#1e1e24,stroke:#6b7280,stroke-width:1.5px,color:#e5e7eb; classDef private fill:#1e293b,stroke:#0284c7,stroke-width:1.5px,color:#f8fafc; class JVM root class SHARED,PRIVATE branch class HEAP,METHOD leaf class PC,VMSTACK,NATIVE private 下面用 HTML+CSS 布局图精确展示 JVM 内存各区域的相对位置、大小关系和内部结构: ...