知识点标签

JVM面试题解析

JVM相关面试题解析,按真实面经题目沉淀核心机制、易错点和面试官追问。

15 道题 3 个岗位 4 个公司

JVM相关面试题

常见 JVM 垃圾收集器分别适合什么场景?

垃圾回收器适用场景不能只背名称,而要围绕吞吐量、停顿时间、堆大小、对象生命周期、CPU 余量和运行时版本来选择。Serial 适合小堆和低资源环境,Parallel 适合吞吐优先任务,CMS 是旧版本低停顿方案但有碎片和并发失败风险,G1 是较新主流服务端的平衡型选择,ZGC 与 Shenandoah 面向更严苛的低停顿和大堆场景,Epsilon 只适合测试、压测和短生命周期实验。

JVM 线程栈大小参数 -Xss 如何设置?

这道题考察的是 JVM 运行时栈内存模型和线程栈参数。核心结论:每个 Java 线程都有独立的 Java 虚拟机栈,方法调用会不断压入栈帧;递归过深或调用链过深通常会触发 StackOverflowError;线程创建过多、每个线程栈过大或系统/容器可用内存不足时,可能触发 OutOfMemoryError: unable to create new native thread。JVM 中常用 -Xss 设置单个线程的栈大小。

JVM 堆内存通常如何分区?

JVM 堆可以从两条线理解:按对象生命周期分为年轻代和老年代,年轻代内部又分 Eden 和两个 Survivor;按具体垃圾收集器实现,传统分代收集器更强调连续代空间,G1、ZGC、Shenandoah 等更强调 region 或分区化管理。回答时要特别说明:元空间和线程栈不属于堆,TLAB 是 Eden 中给线程预分配的私有分配缓冲区,大对象可能直接进入老年代或被特殊 region 管理。

JVM 垃圾回收机制是什么?

JVM 垃圾回收机制的核心,是 JVM 自动识别已经不可达的对象并回收其占用的内存,从而降低手动释放内存的负担。面试回答要先明确:GC 主要发生在 Java 堆,尤其是新生代;同时也要补充方法区或元空间在类卸载、常量废弃时也可能被回收,但虚拟机栈、本地方法栈和程序计数器通常随线程或栈帧生命周期自动释放,不是 GC 的主要战场。

JVM中的【堆】是用什么数据结构来实现的?

JVM 中的堆不是二叉堆、最大堆、最小堆这种数据结构,而是 JVM 运行时用于存放对象实例和数组的一块共享内存区域。它的具体组织方式取决于垃圾收集器:可能按年轻代、老年代划分,也可能按 Region 管理;对象分配通常依赖 TLAB、指针碰撞、空闲列表等机制,而对象回收依赖可达性分析和 GC 元数据。

JVM 运行时内存区域如何划分?

JVM 运行时内存区域可以按线程私有和线程共享来划分:程序计数器、虚拟机栈、本地方法栈属于线程私有;堆和方法区属于线程共享。面试回答不能只背名称,还要说明每块区域存什么、生命周期如何、会抛什么错误、和垃圾回收的关系,以及 JDK 8 以后永久代被元空间替代这一常见边界。

JVM 如何判断对象可以被回收,分代收集如何工作?

这道题核心不是背垃圾收集器名称,而是说明 JVM 如何从“对象是否还可被程序使用”推导出“是否可回收”,再解释为什么堆会按年轻代和老年代组织。回答时要把可达性分析、GC Roots、引用强度、finalize 的特殊边界,以及 Minor GC、Major GC、Full GC、对象晋升和跨代引用处理串成一条完整链路。

java内存泄露怎么排查?

java内存泄露怎么排查?这道腾讯牛客题的关键是围绕“Java 内存泄漏排查”讲清概念、机制、取舍和边界。Java 内存泄漏排查要先确认堆内存是否持续增长、Full GC 后是否无法回落,再用 heap dump 和对象引用链定位被意外持有的对象。重点不是 free 失败,而是对象仍被 GC Roots 间接引用。

简介 JVM 的可达性分析过程?

简介 JVM 的可达性分析过程?这道腾讯牛客题的关键是围绕“JVM 可达性分析”讲清概念、机制、取舍和边界。JVM 可达性分析从一组 GC Roots 出发,沿对象引用关系遍历对象图;能从 Roots 到达的对象判定为存活,不可达对象才有机会被回收。它解决的是对象是否还被程序间接使用的问题。

JVM 堆内存分配如何保证线程安全?

JVM 堆内存分配如何保证线程安全?这道腾讯牛客题的关键是围绕“JVM 堆对象分配的线程安全”讲清概念、机制、取舍和边界。JVM 堆内存分配保证线程安全,常见方式是优先使用 TLAB 给每个线程分配一小块私有 Eden 区域,线程在自己的 TLAB 里用指针碰撞快速分配;TLAB 不够或不适用时,再走 CAS 加失败重试或加锁的慢路径。

synchronized 锁升级的过程是什么?

synchronized 锁升级的过程是什么?这道腾讯牛客题的关键是围绕“synchronized 锁升级过程”讲清概念、机制、取舍和边界。synchronized 锁升级是 JVM 为不同竞争强度优化 monitor 成本的过程,常见路径是无锁、偏向锁、轻量级锁、重量级锁。现代 JVM 版本对偏向锁支持有所变化,但面试回答仍要说明锁状态随竞争变化而升级。