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 保障线程安全」。

Logo

Agent 垂直技术社区,欢迎活跃、内容共建。

更多推荐