JVM 高频10问

JVM 高频10问 + 极简标准答案(10年Java资深版,直接背)

1. 为什么 -Xms 和 -Xmx 要设置相等?

避免运行期堆内存动态扩容/缩容,减少GC停顿与性能抖动,稳定内存布局,提升服务稳定性。

2. G1 核心原理?

分区Region模型,分代回收;兼顾吞吐量与低延迟,可指定 MaxGCPauseMillis 控制STW;混合回收收集新生代+部分老年代,减少Full GC频率。

3. ZGC 优势是什么?

染色指针+读屏障,几乎无STW;支持TB级大堆、毫秒级停顿;高并发核心低延迟服务首选,取代G1做极致性能优化。

4. Full GC 频繁怎么排查优化?

先用 jstat -gc 看GC指标 → jmap看堆使用 → dump快照MAT分析;

常见原因:内存泄漏、元空间溢出、大对象过多、新生代太小;

优化:调内存比例、优化代码对象复用、更换收集器、清理无效缓存/ThreadLocal。

5. OOM 常见场景+解决?

  1. 堆溢出:集合无限扩容、缓存不清理 → 限流+过期淘汰
  2. ThreadLocal未remove → 使用后强制clear
  3. 元空间溢出:动态类/代理过多 → 调大Metaspace
  4. 栈溢出:递归过深 → 改迭代、调-Xss

6. 年轻代频繁YGC怎么处理?

新生代容量不足 + 短期短命对象爆发;

调大新生代、优化循环内创建对象、对象池复用、减少临时大数组。

7. CMS 和 G1 区别?

CMS 纯并发、碎片严重、Full GC卡顿高;

G1分区整理、可控停顿、碎片少,现在生产基本淘汰CMS用G1/ZGC。

8. JVM 内存区域有哪些?

堆、栈、本地方法栈、元空间(方法区)、程序计数器;

堆放实例,栈存局部变量/栈帧,计数器唯一无OOM区域。

9. 如何线上快速排查CPU飙高?

top定位高占用进程 → top -H 看线程 → jstack导出快照 → 查找RUNNABLE死循环/锁竞争;

结合jstat看是否GC打爆,双向定位根源。

10. 逃逸分析有什么用?

JVM自动优化:标量替换、栈上分配、同步消除;

减少堆对象分配,降低GC压力,提升整体吞吐量。


附赠1分钟总结兜底(面试收尾必说)

线上统一固定堆大小防扩容,常规业务G1控STW,核心低延迟上ZGC;配置OOM自动dump,MAT定位内存泄漏与大对象问题;结合jstat/jstack/top快速排查CPU与GC异常,再配合逃逸分析、元空间、锁优化落地整套JVM调优,保障高并发服务平稳低延迟。

相关推荐
light blue bird16 小时前
Razor Pages工序管理Web端界面化实现方案
jvm·windows·web端
小江的记录本1 天前
【JVM虚拟机】垃圾回收GC:垃圾收集器:CMS:核心原理、回收流程、优缺点、废弃原因(附《思维导图》+《面试高频考点清单》)
java·jvm·后端·python·spring·面试·maven
小江的记录本1 天前
【JVM虚拟机】垃圾回收GC:垃圾回收算法:标记-清除、标记-复制、标记-整理、分代收集(附《思维导图》+《面试高频考点清单》)
java·jvm·后端·python·算法·安全·面试
小江的记录本1 天前
【JVM虚拟机】垃圾回收GC:垃圾收集器:G1:Region分区、Mixed GC、回收流程、适用场景(高频)(附《思维导图》+《面试高频考点清单》)
java·jvm·后端·python·spring·spring cloud·面试
ID_180079054731 天前
小红书评论 API 接口详解与实战开发
java·jvm·c++
東雪木1 天前
JVM 与 Java 内存模型 专属复习笔记
java·jvm·笔记·java面试
Undergoer_TW2 天前
Colmap 进军嵌入式:SQLite 数据库从崩溃退出到自动治愈
jvm·数据库·sqlite
骄马之死2 天前
ThreadLocal 核心原理
java·jvm·算法
一只小白0002 天前
【JVM | 第二篇】—— 类加载器 & 双亲委派模型
jvm
Nyarlathotep01132 天前
自动内存管理(3):HotSpot中垃圾收集的实现
jvm·后端