Java 8 / 11 / 17 / 21

内存区域对比 · 面试漫画速记

一页背完四大LTS版本内存核心差异

📌 核心结论(开口先答)

四个LTS版本的JVM运行时数据区逻辑划分完全一致,均为「程序计数器、虚拟机栈、本地方法栈、堆、元空间」5块; 均已移除永久代,用元空间(堆外本地内存)实现方法区。
所有版本差异都集中在底层实现层面,没有新增或删除任何标准内存区域。

Java 8

经典基线版

  • ✅ 永久代正式替换为元空间,类元数据迁移至堆外本地内存
  • ✅ 默认GC:Parallel GC(吞吐量优先)
  • ✅ G1为可选GC
  • ✅ 字符串常量池已移至堆内
Java 11

过渡稳定版

  • ✅ 默认GC切换为G1 GC,兼顾吞吐与响应
  • ✅ ZGC首次引入(实验性)
  • ✅ CMS被标记废弃
  • ✅ 紧凑字符串默认开启;元空间优化碎片回收
Java 17

生产主流版

  • ✅ ZGC、Shenandoah GC转为正式生产特性
  • ✅ CMS垃圾回收器彻底移除
  • ✅ 元空间、对象头、压缩指针深度优化
  • ✅ 企业级应用主流升级选型
Java 21

新一代LTS

  • ✅ 虚拟线程正式GA:栈改为按需分段栈,支持百万级并发
  • ✅ 分代ZGC正式上线,兼顾低停顿与高吞吐
  • ✅ 元空间、对象内存布局进一步紧凑优化
  • ✅ 值类预览,重塑未来内存模型

💬 高频面试题 · 标准答案

Q1:Java8到Java21新增了内存区域吗?

没有。五大运行时数据区结构从未改变,变化只在GC算法、元空间实现、栈存储方式等底层实现。

Q2:永久代哪个版本被移除?

Java 8就彻底移除永久代,后续所有版本均使用元空间实现方法区。

Q3:各版本默认GC分别是什么?

Java8默认Parallel GC; Java11 / 17 / 21默认均为G1 GC。

Q4:ZGC哪个版本正式生产可用?

Java11实验性引入,Java17(LTS)成为首个支持正式版ZGC的长期支持版本。

Q5:虚拟线程是新的内存区域吗?

不是。虚拟线程依然使用虚拟机栈,只是栈从固定预分配改成按需分段分配,没有新增任何内存区域。

JVM 面试速记 · 漫画版 | 一页搞定四大LTS内存差异