)
第44.3篇JVM底层与字节码核心考点速查2026版系列导航《Java 100 天进阶之路》完整目录 |⬅️ 上一篇第44篇jd-gui反编译class文件解决中文乱码问题 |➡️ 下一篇第45篇ArrayList源码解析️ 本文阅读地图2 分钟速览JVM 和字节码是面试的“压轴题”也是区分“会用”和“懂底层”的分水岭。本文汇总 10 组 JVM 与字节码核心考点配速查表 一句话总结编号速查主题一句话总结1JVM 内存结构JDK 8堆对象 栈局部变量 元空间类信息2堆 vs 栈堆存对象线程共享栈存局部变量线程私有3类加载生命周期加载→验证→准备→解析→初始化→使用→卸载4双亲委派模型先问爸爸要爸爸没有自己找5GC 算法速查复制年轻代、标记-清除/整理老年代6JIT 编译器热点代码编译为本地机器码7字节码指令速查javap -c查看常用指令表8类加载器层次Bootstrap → Extension → Application9finalize()vstry-with-resourcesfinalize 已弃用try-with-resources 是正途10常见 JVM 参数-Xmx、-Xms、-XX:MetaspaceSize文章目录第44.3篇JVM底层与字节码核心考点速查2026版️ 本文阅读地图2 分钟速览一、核心速查表二、逐组速查详解速查1JVM 内存结构JDK 8速查2堆 vs 栈速查3类加载生命周期7个阶段速查4双亲委派模型速查5GC 算法速查速查6JIT 编译器速查7字节码指令速查javap -c 常用速查8类加载器层次速查9finalize() vs try-with-resources速查10常见 JVM 参数三、避坑要点四、练习题 你的学习进度 下一篇文章预告一、核心速查表本篇文章涵盖 JVM 与字节码中 10 组最高频的核心考点来源于第36~44篇的全部内容篇号涉及内容数量第36篇NIO扩展—第38篇Java 是动态语言吗扩展—第39篇泛型—第40篇浮点数精度—第42篇GC 算法、JIT、finalize()3组第43篇字节码指令、javap2组第44篇反编译工具—背诵建议JVM 是面试的“高分模块”这 10 组速查建议全部背下来。二、逐组速查详解速查1JVM 内存结构JDK 8速查2堆 vs 栈对比维度堆Heap栈Stack线程归属所有线程共享每个线程私有存储内容对象实例、数组局部变量、方法参数、对象引用生命周期随 JVM 启动 → 停止随方法调用 → 结束内存管理GC 管理自动分配/释放栈帧入栈/出栈溢出异常OutOfMemoryErrorStackOverflowError速度较慢较快连续内存速查3类加载生命周期7个阶段重点记忆准备阶段给静态变量分配内存并赋默认值不是初始值初始化阶段执行静态变量赋值和静态代码块真正赋初始值Class.forName()会触发初始化ClassLoader.loadClass()不会速查4双亲委派模型三大类加载器类加载器加载路径Java 中获取Bootstraprt.jar核心类库nullExtensionext目录getParent()ApplicationclasspathgetSystemClassLoader()好处避免核心类被篡改保证类不会被重复加载。速查5GC 算法速查算法原理适用区域优点缺点复制算法分成两块存活对象复制到另一块年轻代无碎片高效内存利用率低50%标记-清除标记存活清除未标记老年代无需移动对象有碎片标记-整理标记存活整理到一端老年代无碎片移动开销大面试口诀年复制老标清整。速查6JIT 编译器对比维度解释执行JIT 编译执行方式逐条解释字节码编译为本地机器码速度慢快 10-20 倍启动时间快无需编译慢需要编译适用场景启动时、低频代码热点代码高频执行触发条件—方法调用次数 阈值默认 10000速查7字节码指令速查javap -c常用指令含义示例aload_0将局部变量表第0个引用压栈非静态方法中是this实例方法开头必有iload_1/istore_1int 加载/存储到 slot 1操作 int 变量getstatic获取静态字段值System.outputstatic设置静态字段值修改 static 变量ldc将常量字符串、int压栈ldc #3 // String Helloinvokespecial调用构造方法、私有方法、父类方法super()调用invokevirtual调用实例方法动态绑定普通方法调用invokestatic调用静态方法工具类方法iadd/isubint 加减运算a bireturn/areturn返回 int / 引用类型方法返回值returnvoid 方法返回无返回值的方法checkcast类型检查泛型擦除后出现(String) list.get(0)速查8类加载器层次Bootstrap ClassLoaderJVM 自带C 实现 ↑ 父加载器 Extension ClassLoader加载 ext/*.jar ↑ 父加载器 Application ClassLoader加载 classpath ↑ 父加载器 自定义 ClassLoader热部署、加密 class速查9finalize()vstry-with-resources对比维度finalize()try-with-resources推出时间Java 1.0Java 7当前状态❌已弃用Java 9✅推荐执行时机GC 前调用不确定try 块结束后立即执行适用对象任何对象实现了AutoCloseable的资源异常处理异常被吞没异常可被捕获支持抑制异常✅ 正确做法用try-with-resources不要用finalize()。速查10常见 JVM 参数参数含义示例-Xms初始堆大小-Xms512m-Xmx最大堆大小-Xmx2g-Xss栈大小-Xss256k-XX:MetaspaceSize元空间初始大小-XX:MetaspaceSize128m-XX:MaxMetaspaceSize元空间最大大小-XX:MaxMetaspaceSize256m-XX:PrintGCDetails打印 GC 日志调试/优化时使用-XX:UseG1GC使用 G1 垃圾回收器JDK 9 默认三、避坑要点错误/误区后果正确做法认为 JVM 跨平台理解偏差JVM 是 C 写的不跨平台字节码跨平台认为栈内存会被 GC 回收概念错误GC 只回收堆栈自动释放依赖finalize()释放资源资源泄漏用try-with-resources混淆方法区永久代和元空间JDK 版本知识落后JDK 8 后用元空间认为垃圾回收立即执行错误预期GC 不可控只是“建议”四、练习题简答题JDK 8 的 JVM 内存模型包含哪几个区域各存储什么数据场景题一个递归程序调用 10 万次后抛出StackOverflowError是什么原因如何优化代码题在命令行执行javap -c反编译一个简单类找到invokevirtual指令对应的源码行。 你的学习进度当前第44.3篇 ·基础篇外挂JVM底层与字节码核心考点速查✅ 已完成基础篇第1~44篇 第4.1篇 第20.1篇 第44.3篇 正在学第44.3篇⏳ 待学习第45~108篇进阶篇 完整目录 学习指南 | 订阅本专栏不错过每一篇 下一篇文章预告下一篇《第45篇ArrayList源码解析》内容简介ArrayList 底层动态数组、扩容机制1.5 倍、modCountfail-fast 机制。基础篇外挂系列即将完结进阶篇 ArrayList 源码解析马上开启《Java 100 天进阶之路 | 从入门到上岗就业》每天一篇建议收藏 关注一起100天拿offer 点击关注我更新后第一时间收到推送