【JVM深度解析】第28篇:JVM发展史:从Sun到Oracle
摘要Java 诞生于 1995 年JVM 作为其核心技术也走过了近 30 年的演进历程。从最初的玩具虚拟机到今天支持云原生、容器化、亚毫秒级停顿的现代运行时JVM 的每一步演进都在解决新的性能和功能挑战。本文按时间线梳理 JVM 的关键里程碑JDK 1.0 的 Applet 时代、JDK 1.2 的 Client/Server VM 分离、JDK 5.0 的语法糖革命、JDK 7 的 invokedynamic、JDK 8 的 Lambda 表达式和 Metaspace、JDK 11 的 ZGC、JDK 17 的模式匹配和虚拟线程。理解历史才能预见未来。一、1995-1999JVM 的诞生1.1 Java 的诞生1995 年 5 月 23 日Sun Microsystems 发布 Java 1.0 核心理念 ┌──────────────────────────────────────────────────────────────────┐ │ Write Once, Run Anywhere (WORA) │ │ 一次编写到处运行 │ │ │ │ 技术支撑 │ │ - 字节码跨平台的中间表示 │ │ - JVM解释执行字节码 │ │ - 类加载器动态加载 class 文件 │ │ │ └──────────────────────────────────────────────────────────────────┘1.2 早期 JVM 的局限性JDK 1.0-1.1 的 JVM - 纯解释执行速度很慢比 C 慢 20-50 倍 - 没有 JIT 编译器 - 垃圾收集器是串行的Serial GC - 没有本地方法优化 - 只支持 32 位地址空间二、2000-2004Client/Server VM 分离2.1 JDK 1.2JIT 编译器加入JDK 1.2 (1998) 关键改进 ┌──────────────────────────────────────────────────────────────────┐ │ │ │ 1. JIT 编译器加入 │ │ - HotSpot 引擎首次亮相 │ │ - 热点检测 编译优化 │ │ │ │ 2. Client/Server VM 分离 │ │ - Client VMC1 编译器快速启动 │ │ - Server VMC2 编译器深度优化 │ │ │ │ 3. GC 收集器丰富 │ │ - Serial GC-client 默认 │ │ - Throughput GC-server 默认 │ │ - 增量式 GCCMS 前身 │ │ │ └──────────────────────────────────────────────────────────────────┘2.2 JDK 1.4NIO 的引入JDK 1.4 (2002) 的革命性改进 1. NIONew Input/Output - Buffer/Channel 模式 - Selector 机制 - 直接内存映射 2. 正则表达式Pattern 类 3. 日志 APIjava.util.logging 4. IPV6 支持 5. 链式异常处理三、2004-2014语法糖与性能革命3.1 JDK 5.0语言增强JDK 5.0 (2004) 的里程碑更新 ┌──────────────────────────────────────────────────────────────────┐ │ │ │ 语言层面 │ │ - 泛型Generics │ │ - 注解Annotations │ │ - 自动装箱/拆箱Auto Boxing │ │ - 枚举Enums │ │ - 可变参数Varargs │ │ - for-each 循环 │ │ - 静态导入Static Import │ │ │ │ 并发层面 │ │ - java.util.concurrent 包 │ │ - Executor 框架 │ │ - ConcurrentHashMap │ │ - Lock 接口 │ │ - CountDownLatch/CyclicBarrier │ │ │ └──────────────────────────────────────────────────────────────────┘3.2 JDK 6性能持续优化JDK 6 (2006) 改进 1. Swing 外观改进 2. 脚本引擎支持Rhino → Nashorn 3. GC 改进 - G1 收集器首次引入 - Parallel Old GC 正式版 4. Java Web Start 5. Compiler APIjavac 可被调用3.3 JDK 7invokedynamicJDK 7 (2011) 关键改进 ┌──────────────────────────────────────────────────────────────────┐ │ │ │ 1. invokedynamic 指令JSR 292 │ │ - 为 JVM 上的动态语言提供支持 │ │ - 方法句柄MethodHandle │ │ - Lambda 表达式的底层支持 │ │ │ │ 2. G1 GC 成为正式版 │ │ │ │ 3. NIO.2 文件系统 API │ │ - Path/Files/WatchService │ │ │ │ 4. try-with-resources │ │ │ │ 5. 字符串 switch │ │ │ │ 6. 数字字面量下划线 │ │ int num 1_000_000; │ │ │ └──────────────────────────────────────────────────────────────────┘四、2014-2018现代化 JVM4.1 JDK 8Lambda 与 MetaspaceJDK 8 (2014) 是 Java 历史上最重要的版本之一 ┌──────────────────────────────────────────────────────────────────┐ │ │ │ 1. Lambda 表达式 │ │ list.stream().filter(x - x 0).collect(toList()); │ │ │ │ 2. Stream API │ │ 函数式编程风格 │ │ │ │ 3. 接口默认方法 │ │ default void method() { } │ │ │ │ 4. Optional 类 │ │ │ │ 5. 日期时间 APIJSR 310 │ │ LocalDate/LocalDateTime/Instant │ │ │ │ 6. 永久代 → Metaspace │ │ - 移出 PermGen │ │ - 使用本地内存 │ │ - 类元数据不再受堆大小限制 │ │ │ │ 7. Nashorn JavaScript 引擎 │ │ │ │ 8. 静态链接的 JNI │ │ │ └──────────────────────────────────────────────────────────────────┘4.2 JDK 9模块化系统JDK 9 (2017) 的模块化革命 1. Project Jigsaw → Java Platform Module System (JPMS) - 模块化 Java 应用和 JDK 本身 - 更好的封装 - 减少 JDK 体积 2. JShellREPL 交互式编程 3. HTTP/2 Client API 4. Process API 改进 5. Reactive StreamsFlow API 6. GC 日志统一化-Xlog五、2018-2024云原生 JVM5.1 JDK 11ZGC 登场JDK 11 (2018) LTS 版本 1. ZGCJEP 333 - 亚毫秒级停顿 - 与堆大小无关 - 支持 TB 级堆 2. Epsilon GC - 无操作 GC - 短生命周期应用 3. 移除 Java EE 和 JavaFX 模块 4. HTTP Client标准 5. 局部变量类型推断var var list new ArrayListString();5.2 JDK 17下一个 LTSJDK 17 (2021) LTS 版本 1. Sealed Classes密封类 2. Pattern Matching for switch预览 3. Records预览 → 正式 4. Text Blocks正式 String json { name: Java } ; 5. Foreign Function Memory API预览 6. 移除 Applet API 7. ZGC 并发类卸载5.3 JDK 21虚拟线程JDK 21 (2023) LTS 版本 1. Virtual Threads项目 Loom - 轻量级线程 - 百万级并发 - 无需线程池 2. Record Patterns 3. Pattern Matching for switch正式 4. Sequenced Collections 5. String Templates预览 6. Foreign Function Memory API正式六、JVM 演进规律总结┌──────────────────────────────────────────────────────────────────┐ │ JVM 演进的五大趋势 │ ├──────────────────────────────────────────────────────────────────┤ │ │ │ 1. 性能持续提升 │ │ 解释执行 → JIT 编译 → 分层编译 → 激进优化 │ │ │ │ 2. GC 越来越智能 │ │ Serial → Parallel → CMS → G1 → ZGC/Shenandoah │ │ │ │ 3. 语言表达能力增强 │ │ 泛型 → Lambda → Stream → Record → Pattern Matching │ │ │ │ 4. 云原生支持 │ │ 容器感知 → 弹性堆 → ZGC → AOT │ │ │ │ 5. 多语言支持 │ │ invokedynamic → Truffle → GraalVM │ │ │ └──────────────────────────────────────────────────────────────────┘总结JVM 近 30 年的演进史是一部性能优化、语言进化、平台扩展的交响曲。从最初的玩具虚拟机到今天支持 TB 级堆、亚毫秒级停顿、百万级并发的现代化运行时JVM 始终保持着旺盛的生命力。理解历史才能更好地把握未来。系列导航上一篇【JVM深度解析】第27篇并发编程实战案例与陷阱下一篇【JVM深度解析】第29篇HotSpot VM内部实现探秘系列目录JVM深度解析参考资料OpenJDK HistoryJVM Specification HistoryJava Version History
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2529402.html
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!