《Java 面试:JVM 的 5 个核心考点(内存模型 / GC / 类加载)》
·
Java 面试:JVM 的 5 个核心考点
1. 内存区域(运行时数据区)
JVM 内存分为线程私有和共享区域:
- 线程私有:程序计数器(当前指令地址)、虚拟机栈(方法调用帧)、本地方法栈(Native 方法)
- 线程共享:堆(对象实例)、方法区(类元数据、常量池)
- 直接内存:NIO 使用的堆外内存
关键点:堆是 GC 主要区域,方法区在 JDK8 后由元空间(Metaspace)实现。
2. 垃圾回收(GC)
核心机制包括:
- 回收算法
- 标记-清除(碎片问题)
- 复制算法(新生代 Survivor 区)
- 标记-整理(老年代)
- 分代收集(新生代 + 老年代组合策略)
- GC 器对比
收集器 工作模式 适用场景 Serial 单线程 客户端模式 Parallel Scavenge 多线程 吞吐量优先 CMS 并发标记 低延迟 G1/ZGC 分区回收 大堆、亚毫秒暂停
3. 类加载机制
类加载流程:
graph LR
A[加载] --> B[验证]
B --> C[准备]
C --> D[解析]
D --> E[初始化]
- 双亲委派模型:
子加载器委托父加载器优先加载,避免核心类被篡改。 - 破坏场景:
SPI 服务(如 JDBC 用线程上下文类加载器)。
4. 内存模型(JMM)
解决多线程可见性与有序性问题:
- Happens-Before 原则:
若操作 A 先于 B,则 A 结果对 B 可见。 - 内存屏障:
禁止指令重排序(如volatile写前插入 StoreStore 屏障)。 - 原子性保障:
通过synchronized或 CAS 实现。
5. 性能监控与调优
常用工具链:
- 命令行工具:
jps(进程查看)、jstat(GC 统计)、jstack(线程快照) - 图形化工具:
VisualVM(内存/线程分析)、MAT(堆转储解析) - 调优参数:
-Xmx(最大堆)、-XX:+UseG1GC(启用 G1)、-XX:MaxGCPauseMillis(目标暂停时间)
面试提示:重点理解各考点的关联性,如「类加载触发内存分配」→「对象进入堆」→「GC 管理生命周期」→「JMM 保障线程安全」。
更多推荐
所有评论(0)