java jvm知识点

下面给你一份 Java JVM 知识点全景总结(面试 + 实战级) ,

覆盖 内存结构 → 垃圾回收 → 类加载 → 调优 → 面试高频 ,适合 中高级 Java 面试。


一、JVM 是什么?

JVM(Java Virtual Machine)是 Java 程序的运行环境,负责加载字节码并执行。

✅ 跨平台

✅ 自动内存管理

✅ 安全沙箱


二、JVM 内存结构(必背 ⭐⭐⭐⭐⭐)

1️⃣ 运行时数据区

复制代码
JVM
├── 线程私有
│   ├── 程序计数器(PC)
│   ├── Java 虚拟机栈
│   └── 本地方法栈
└── 线程共享
    ├── 堆(Heap)
    ├── 方法区(Metaspace)
    └── 运行时常量池

2️⃣ 各区域作用

区域 作用 异常
程序计数器 记录执行位置 ❌
虚拟机栈 方法调用栈帧 StackOverflowError
本地方法栈 Native 方法 StackOverflowError
堆 对象实例 OutOfMemoryError
方法区 类信息、常量 OutOfMemoryError

三、Java 堆(GC 核心 ⭐⭐⭐⭐⭐)

1️⃣ 堆结构(分代)

复制代码
Heap
├── Young Generation
│   ├── Eden
│   ├── Survivor From
│   └── Survivor To
└── Old Generation

2️⃣ 对象分配流程

复制代码
new Object()
   ↓
Eden
   ↓
Minor GC
   ↓
Survivor
   ↓
年龄 ≥ 15
   ↓
Old

3️⃣ 为什么分代?

✅ 弱分代假说

✅ 大部分对象朝生夕死

✅ GC 效率更高


四、垃圾回收(GC ⭐⭐⭐⭐⭐)

1️⃣ 如何判断对象可回收?

✅ 引用计数法(不用)

  • 循环引用问题

✅ 可达性分析(JVM 使用)

复制代码
GC Roots
 ├── 栈中引用
 ├── 方法区静态变量
 ├── 常量
 └── JNI 引用

2️⃣ 垃圾回收算法

算法 说明
标记-清除 碎片多
标记-复制 无碎片
标记-整理 慢
分代收集 ✅ 主流

3️⃣ 常见 GC 器(重点)

GC 特点
Serial 单线程
Parallel Scavenge 吞吐量
CMS 低延迟
G1 ✅ 主流
ZGC 超低延迟

4️⃣ G1 GC(必问)

✅ 区域化(Region)

✅ 可预测停顿

✅ 替代 CMS


五、类加载机制(高频)

1️⃣ 类加载过程

复制代码
加载 → 验证 → 准备 → 解析 → 初始化

2️⃣ 类加载器

加载器 作用
Bootstrap rt.jar
Extension ext
Application classpath

3️⃣ 双亲委派模型

复制代码
自定义类加载器
      ↓
AppClassLoader
      ↓
ExtClassLoader
      ↓
BootstrapClassLoader

✅ 防止核心类被篡改


六、JVM 调优(实战)

1️⃣ 常用参数

bash 复制代码
-Xms2g
-Xmx2g
-Xmn512m
-XX:+UseG1GC
-XX:MaxGCPauseMillis=200

2️⃣ OOM 排查

复制代码
jps
jstat -gc
jmap -heap
jmap -dump
MAT 分析

3️⃣ 常见 OOM

类型 原因
Java heap space 堆太小
Metaspace 类太多
GC overhead limit GC 过度
Direct buffer memory NIO

七、JVM 性能监控工具

工具 作用
jps 进程
jstat GC
jinfo 参数
jmap 堆
jstack 线程

八、JVM 面试高频 20 问(必刷)

✅ JVM 内存结构?

✅ 堆和栈区别?

堆是 JVM 中最大的内存区域,用于存储对象实例,是所有线程共享的,需要垃圾回收;

栈是线程私有的,用于存储方法调用的栈帧、局部变量和基本数据类型,随方法结束而释放,不需要 GC。

栈中存放的是对象的引用,真正的对象存储在堆中

✅ 对象创建过程?

✅ GC Roots 有哪些?

✅ Minor GC / Major GC?

✅ G1 工作原理?

✅ 双亲委派模型?

✅ 类加载过程?

✅ OOM 排查思路?


九、面试标准答案(背这段 ✅)

JVM 内存分为线程私有和线程共享两部分,堆是 GC 的主要区域。
通过可达性分析判断对象是否可回收,采用分代收集算法。
G1 是目前主流的垃圾收集器,通过 Region 化和可预测停顿提升性能。
类加载遵循双亲委派模型,防止核心类被篡改。


十、一句话总结(记住这句)

✅ JVM = 内存 + GC + 类加载 + 调优


相关推荐
小羊没烦恼!4 天前
微服务化的基石——持续集成
java·大数据·word·powerpoint·.net
俊昭喜喜里4 天前
java中的继承和多态的区别
java
小羊没烦恼!4 天前
初探性能优化——2个月到4小时的性能提升
java·开发语言·windows·算法·c#
譕痕4 天前
JSONObject与JSONArray封装数据格式区别
java·json
胡写代码4 天前
别再前后端各写一套表单校验了
java·后端
小鱼能吃糖4 天前
缺陷修复总览 · mall电商项目:5类缺陷,1个病根,4个业务域
java·电商
此时不提桶,更待何时4 天前
01-06-A-JVM排查实战详解
java·jvm
伞伞悦读4 天前
【第38期】Python 模块与包详解:import、from、模块搜索路径、包结构和 __init__
开发语言·python
vipxieliang4 天前
ValidX 在 DDD 领域驱动设计中的实践
java·spring boot
C语言小火车4 天前
C/C++ 为什么需要编译器?
开发语言·c++