文章列表
线上 Full GC 频繁,如何排查解决?
本文系统讲解线上Full GC频繁的排查与解决方案。从确认现象、分析GC日志、获取堆转储、使用MAT分析内存泄漏,到定位代码问题与制定优化方案,提供完整的实战排查路径,助你快速定位并解决GC性能瓶颈。
Spring 第一次启动执行慢,从 JVM 角度讲讲?
本文从JVM角度深度解析Spring第一次启动慢的根本原因,涵盖海量类加载与验证、解释执行与JIT预热、密集对象创建引发GC频繁、反射与动态代理开销等核心维度,并提供类加载加速、JIT调优、GC优化及CDS等实践建议,助你根治冷启动性能瓶颈。
JVM 对 Synchronized 关键字的实现是怎样的?
本文深度解析JVM对synchronized关键字的底层实现,从对象头(Mark Word)与Monitor机制出发,详解锁的四种状态(无锁/偏向锁/轻量级锁/重量级锁)的升级过程,以及字节码指令、锁消除、锁粗化等优化策略,助你透彻理解Java并发同步的核心。
满足什么条件时,一个 Java 类会被卸载?
本文深度解析Java类被卸载的三大条件:类的所有实例被回收、加载该类的ClassLoader被回收、Class对象无引用。详解原理、代码示例及热部署场景下的类泄漏问题,助你掌握JVM类生命周期与元空间内存管理。
CMS 的底层原理是什么?优势在哪?
本文深度解析CMS垃圾回收器的底层原理,详细拆解初始标记、并发标记、重新标记、并发清除等六大工作步骤,分析其低延迟优势及对CPU敏感、浮动垃圾、内存碎片等劣势,并探讨CMS在JDK版本中的演进与替代方案。
CMS 和 G1 垃圾回收器的区别是什么?
本文深度解析CMS和G1垃圾回收器的核心区别。从堆内存布局、回收算法(标记-清除 vs 标记-整理)、停顿模型、并发机制到适用场景全面对比,并剖析CMS的碎片化问题与G1的可预测停顿优势,助你掌握JVM低延迟回收器选型与调优要点。
OOM 引起原因以及如何排查?
本文深度解析OOM(OutOfMemoryError)的常见原因,涵盖Java堆、元空间、栈/线程、直接内存等区域溢出场景,并系统介绍排查方法与工具链(堆转储、MAT分析、jstat监控、jmap直方图等)。结合代码示例与最佳实践,助你快速定位内存问题,提升线上故障处理能力。
JVM 运行时内存区域如何划分的?
本文深度解析JVM运行时内存区域的划分,包括线程私有的程序计数器、Java虚拟机栈、本地方法栈,以及线程共享的堆、方法区(JDK8后元空间取代永久代)。详解每个区域的作用、存储内容、异常类型,并延伸至直接内存与最佳实践,助你掌握JVM内存管理核心。
什么是 AOT 编译?和 JIT 有什么区别?
本文深度解析AOT编译与JIT编译的核心区别。从编译时机、启动速度、峰值性能、内存占用、动态特性支持等维度全面对比,并分析各自适用场景(传统后端 vs Serverless/云原生),结合GraalVM Native Image与HotSpot JVM,助你理解Java执行技术演进与选型。
什么是 Class 常量池,和运行时常量池区别是什么?
本文深度解析Class常量池与运行时常量池的核心区别。从.class文件的静态结构到JVM运行时内存的加载过程,详解两者的定义、存储位置、产生时机及动态性,并结合javap命令与String.intern()示例,助你彻底理解这一JVM高频考点。