JVM是什么JVMJava虚拟机本质是运行Java生态的虚拟计算机解决了跨平台问题又通过自动内存管理、编译优化、安全管控等能力让Java具备高效率、运行文档、可扩展性强等特性。一次编写到处运行。屏蔽不同操作系统底层差异Java源码编译为字节码.class文件由JVM在各平台适配执行无需针对不同系统重新编译代码。自动内存管理。将内存划分为对、方法区、虚拟机栈、本地方法栈、程序计数器等然后通过GC垃圾回收算法自动回收无用对象内存避免内存泄漏等。JVM垃圾回收算法1. 标记 - 清除算法Mark-Sweep流程先标记存活对象再清除未标记的垃圾对象。缺点产生大量内存碎片大对象分配易触发 Full GC标记 / 清除效率随对象增多降低。2. 复制算法Copying流程将内存划分为等量两块如 Eden、Survivor每次仅用一块存活对象复制到另一块清空原内存。优点无内存碎片存活对象少时效率高。缺点内存利用率仅 50%存活对象多时复制开销大。适用新生代对象朝生夕灭存活率低。3. 标记 - 整理算法Mark-Compact流程标记存活对象将存活对象向内存一端规整清理边界外垃圾。优点无内存碎片适合存活对象多的场景。缺点整理阶段效率低。适用老年代对象存活率高。4. 分代收集算法商用 JVM 核心核心思想按对象生命周期分代适配不同算法新生代对象存活时间短、存活率低 → 复制算法。老年代对象存活时间长、存活率高 → 标记 - 清除 / 标记 - 整理算法。元空间方法区回收废弃类、常量采用标记 - 清除。JVM垃圾回收器按分代 / 分区、并发能力、适用场景分类核心回收器如下一新生代回收器1. Serial串行回收器单线程 GCGC 时暂停所有用户线程Stop The WorldSTW。简单高效适合客户端、小内存应用。2. ParNew并行回收器Serial 多线程版本多线程并行 GC仍 STW。常用搭配与 CMS 老年代回收器配合使用。3. Parallel Scavenge并行吞吐量回收器多线程并行 GC目标优化吞吐量CPU 执行用户代码时间 / 总时间。支持自适应调节Eden/Survivor 比例、晋升老年代阈值适合后台计算型服务。二老年代回收器1. Serial Old串行老年代Serial 老年代版本单线程 标记 - 整理客户端或 CMS 降级备用。2. Parallel Old并行老年代Parallel Scavenge 老年代版本多线程 标记 - 整理高吞吐量场景首选。3. CMSConcurrent Mark Sweep并发标记清除目标最短 STW 停顿并发回收GC 与用户线程并行。流程初始标记STW→ 并发标记 → 重新标记STW→ 并发清除。缺点内存碎片、CPU 敏感、无法处理浮动垃圾易触发 Full GC。三全代式回收器分区算法无分代强绑定1. G1Garbage-First分区内存管理兼顾吞吐量与停顿可指定最大停顿时间。流程初始标记STW→ 并发标记 → 最终标记STW→ 筛选回收STW。适用大内存服务端JDK 9 默认回收器。2. ZGCZ Garbage Collector超低延迟STW 停顿毫秒级内支持 TB 级堆内存。基于着色指针、读屏障并发全流程几乎无停顿。适用低延迟要求的金融、电商核心服务。3. Shenandoah对标 ZGC超低停顿跨平台支持无堆大小限制。与 ZGC 差异无着色指针用转发指针实现并发整理。