Java 各个版本的特性

1996 年 Sun 公司才发布第一个正式的 Java 版本(rc版本),JDK1.0,开发版本代号 Oak(橡树),以 Oak 命名版本代号,想必也是为了纪念 詹姆斯·高斯林 办公室外的那棵橡树吧。当时互联网也才刚刚开始,JDK 虽然只有几兆(现在 Java 已达 100 多兆),但是受限于网速下载也很慢。在这种情况下,当时仍有多家操作系统厂商使用 Java,也有上万个网页使用 Java 技术制作,这足以说明 Java 在当时的流行性。

Java 0 (1996)

  • 基础特性:面向对象编程基础、基本数据类型、核心API库(如java.lang、http://java.io)。
  • 图形用户界面:AWT(Abstract Window Toolkit)。
  • 网络编程:支持简单的网络通信和Applet。

Java1.1 (1997)

  • 增强特性:内部类、JavaBeans组件模型。
  • 数据库连接:引入JDBC(Java Database Connectivity)。
  • RMI:远程方法调用,支持分布式计算。

Java1.2 (1998)

  • Java 2平台:引入Swing
  • GUI工具包,提供更丰富的图形界面组件。
  • 集合框架:新的集合类(如ArrayList、HashMap)。
  • 增强的安全性:引入Java Plug-in和Java IDL/CO 。

Java1.3 (2000)

  • 性能优化:改进了JVM的性能。
  • 新特性:Java Naming and Directory Interface (JNDI)、JavaSound API。

Java1.4 (2002)

  • 新IO(NIO):改进的I/O处理能力。
  • 断言机制:通过assert关键字进行调试和测试。
  • 日志记录:引入Java Logging API。
  • XML处理:集成了XML解析和XSLT处理。
  • 链式异常处理。
  • 支持IPV6。
  • 支持正则表达式。
  • 引入Imgae I/O API (图片流)。

Java5 (2004)

  • 泛型:类型安全的集合和更多类型检查。
  • 增强的for循环:简化数组和集合的遍历。
  • 自动装箱/拆箱:自动进行基本类型和包装类型之间的转换。
  • 枚举类型:更安全和强大的枚举类。
  • 注解:元数据注解,用于生成文档和代码分析。
  • 静态导入:直接使用静态成员而无需类名限定。

Java6 (2006)

  • 脚本语言支持:通过JDK中的javax.script包。
  • Web服务支持:集成了Java API for XML Web Services (JAX-WS)。
  • 性能改进:JVM和类库的性能优化。
  • 桌面应用增强:改进的Swing、Java 2D和Java SE 6 GUI。
  • JDBC 4.0:简化数据库连接和元数据处理。
  • Pluggable Annotation Processing API:支持自定义注解处理器。

Java7 (2011)

  • Project Coin:小语言改进(如switch中使用字符串、二进制字面量、泛型类型推断)。
  • try-with-resources:自动关闭资源,减少finally块的使用。
  • 多异常捕获:单个catch块可以捕获多种异常。
  • Fork/Join框架:支持并行处理的框架。
  • NIO.2:增强的文件系统API,支持异步I/O操作。
  • Switch语句支持String:switch不再仅限于整型。
  • 整数类型能够用二进制来表示。
  • 数字常量支持下划线。
  • 泛型实例化类型自动推断,即”<>”。

Java8 (2014)

  • Lambda表达式:简化代码的函数式编程风格。
  • Stream API:用于集合操作的强大工具。
  • 新的日期/时间API:java.time包,替代旧的Date和Calendar。
  • 接口默认方法:允许在接口中定义默认实现。
  • Optional类:避免空指针异常,提供更优雅的空值处理。
  • 重复注解 @Repeatable。
  • 使用元空间Metaspace代替持久代(PermGen space)。

Java9 (2017)

  • 模块系统 (Jigsaw):引入模块化,提高应用的封装和可维护性。
  • JShell:交互式Java REPL(Read-Eval-Print Loop)。
  • 改进的Javadoc:支持HTML5,搜索功能增强。
  • 增强的Stream API:添加了许多实用方法。
  • 多版本兼容JAR:支持单个JAR文件包含多个版本的类。
  • 私有接口方法:允许在接口中定义私有方法。
  • 设置G1为JVM默认垃圾收集器。
  • 支持http2.0和websocket的API。

Java10 (2018)

  • 局部变量类型推断:使用var关键字进行局部变量类型推断。
  • G1垃圾收集器改进:提高了G1 GC的性能和可预测性。
  • 线程本地握手,(允许在不执行全局VM安全点的情况下执行线程回调,可以停止单个线程,而不需要停止所有线程或不停止线程)。
  • Optional新增orElseThrow()方法。
  • 类数据共享。
  • Unicode 语言标签扩展
  • 根证书。
  • 不可变集合的改进

Java11 (2018)

  • LTS版本:长期支持版本。
  • 新的字符串方法:如repeat、strip、isBlank等。
  • Http Client重写,支持HTTP/1.1和HTTP/2 ,也支持 websockets
  • 移除和弃用:移除了Java EE和CORBA模块。
  • 对Stream、Optional、集合API进行增强。
  • Flight Recorder:内置性能监控和诊断工具。
  • ZGC:可伸缩低延迟垃圾收集器,(ZGC可以看做是G1之上更细粒度的内存管理策略。由于内存的不断分配回收会产生大量的内存碎片空间,因此需要整理策略防止内存空间碎片化,在整理期间需要将对于内存引用的线程逻辑暂停,这个过程被称为"Stop the world"。只有当整理完成后,线程逻辑才可以继续运行。(并行回收))

Java12 (2019)

  • SSwitch Expressions (预览):增强了switch语句,使其可以作为表达式使用,并支持yield语句返回值。
  • Compact Strings:优化了字符串的内部表示,节省内存。
  • Shenandoah垃圾收集器(实验性):一个新的低暂停时间垃圾收集器,旨在减少GC暂停时间。
  • Microbenchmark Suite:JMH基准测试套件,便于开发者进行微基准测试。
  • G1收集器的优化,将GC的垃圾分为强制部分和可选部分,强制部分会被回收,可选部分可能不会被回收,提高GC的效率。

Java13 (2019)

  • 文本块升级 """;引入了文本块,可以使用"""三个双引号表示文本块,文本块内部就不需要使用换行的转义字符。
  • 增强的动态类数据共享(CDS):提高启动时间和性能。
  • Switch Expressions (标准化):在Java 12基础上,switch表达式正式成为标准特性。
  • 动态CDS归档:提高了启动时间和内存效率。
  • 增强 ZGC 释放未使用内存;(ZGC优化,将标记长时间空闲的堆内存空间返还给操作系统,保证堆大小不会小于配置的最小堆内存大小,如果堆最大和最小内存大小设置一样,则不会释放内存还给操作系统。)。
  • FileSystems.newFileSystem新方法。
  • SocketAPI 重构;(Socket的底层实现优化,引入了NIO)。

Java14 (2020)

  • Switch Expressions (第二次预览):继续完善。
  • 文本块 (第二次预览):继续改进。
  • 记录(Records)(预览特性):简化的数据载体类。
  • Pattern Matching for instanceof (预览):简化类型检查和转换。
  • 改进 NullPointerExceptions提示信息,打印具体哪个方法抛的空指针异常,避免同一行代码多个函数调用时无法判断具体是哪个函数抛异常的困扰,方便异常排查;
  • NUMA-Aware Memory Allocation:提高多核系统的内存分配效率。
  • 删除 CMS 垃圾回收器。

Java15 (2020)

  • 文本块:正式发布,简化多行字符串文字。
  • 封闭类(Sealed Classes)(预览特性):限制哪些类可以扩展或实现。
  • 外部内存访问 API (孵化器):直接访问非堆内存。
  • EdDSA和XEdDSA算法:增加了新的加密算法支持。

Java16 (2021)

  • 记录(Records):正式发布,用于数据封装。
  • 模式匹配:instanceof操作符的模式匹配简化。
  • JEP 393: Foreign-Memory Access API:访问外部内存的API。
  • JEP 389: Vector API (孵化器):加速向量运算。
  • 允许在 JDK C ++源代码中使用 C ++ 14功能。
  • ZGC性能优化,去掉ZGC线程堆栈处理从安全点到并发阶段。
  • 增加 Unix 域套接字通道。
  • 弹性元空间能力。
  • 提供用于打包独立 Java 应用程序的 jpackage 工具。

Java17 (2021)

  • LTS版本:长期支持版本。
  • 封闭类(Sealed Classes):正式发布。
  • 增强的Random API:提供更多的随机生成器实现。
  • Pattern Matching for switch (预览):在switch语句中使用模式匹配。
  • 移除实验性功能:如 Panama 和 Valhalla 的实验API。
  • Unicode 13.0:支持最新的Unicode字符集。
  • Spring 6 和 Spring Boot 3需要JDK17。
  • 移除实验性的 AOT 和 JIT 编译器。
  • 恢复始终执行严格模式 (Always-Strict) 的浮点定义。
  • 正式引入密封类sealed class,限制抽象类的实现。
  • 统一日志异步刷新,先将日志写入缓存,然后再异步刷新。

Java18 (2022)

  • 简单的Web服务器:提供支持静态文件的最小 Web 服务器命令行工具jwebserver,适合用于原型开发和测试。
  • UTF-8默认字符集:JDK内和标准Java API中默认使用UTF-8。
  • 定义了一个全新的 SPI(service-provider interface),用于主要名称和地址的解析。
  • 弃用 Finalization

Java19 (2022)

  • 虚拟线程(Virtual Threads)(预览):改进的线程模型,便于并发编程。
  • 结构化并发(预览):简化多线程的错误处理和取消操作。

Java20 (2023)

  • 记录模式(预览):在模式匹配中更好地支持记录类。
  • 模式匹配switch表达式(预览):增强的switch语句,支持模式匹配。

Java21 (2023)

  • 字符串模版:字符串模版可以让开发者更简洁的进行字符串拼接(例如拼接sql,xml,json等)。该特性并不是为字符串拼接运算符+提供的语法,也并非为了替换StringBuffer和StringBuilder。
  • scoped values:scoped values是一个隐藏的方法参数,只有方法可以访问scoped values,它可以让两个方法之间传递参数时无需声明形参。例如在UserDao类中编写savaUser方法,LogDao类中编写了saveLog方法,那么在保存用户的时候需要保证事务,此时就需要在service层获取Connection对象,然后将该对象分别传入到两个Dao的方法中,但对于savaUser方法来说并不是直接使用Connection对象,却又不得不在方法的形参中写上该对象,其实仅从业务上来看,该方法中只要传入User对象就可以了。
  • record pattern:通过该特性可以解构record类型中的值。
  • switch格式匹配:加入了模式匹配功能,使得操作更加灵活且类型安全,减少了样板代码和潜在错误。
  • 可以在switch中使用when。
  • 虚拟线程(Project Loom):它是平台线程的轻量级替代方案,能够以极低的资源开销实现高并发应用程序。
  • 外部函数与内存 API 增强:基于 Project Panama,Java 21 改进了外部函数和内存 API,提供了与本地代码的无缝互操作性和更好的内存管理。
  • 垃圾回收改进(G1 增强)。
  • 数组模式:数组模式将模式匹配扩展到数组中,使开发者能够在条件语句中更高效地解构和检查数组内容。
  • 顺序集合:顺序集合保持严格的顺序,确保元素按照可预测的顺序进行处理,这对某些算法和数据处理任务至关重要。
  • 增强的可空性注解:Java 21 引入了更强大的可空性注解,帮助开发者在编译时捕捉潜在的 NullPointerException问题,而不是在运行时才发现。用途: 利用 @NonNull 和 @Nullable 等注解来在代码中强制执行空安全约定。
  • 增强的安全功能:Java 21 包含多个安全增强功能,如改进的加密算法、更好的沙箱功能以及更强的默认安全配置,以保护应用免受新兴威胁的侵害。
  • 改进的 JVM 监控与诊断:Java 21 提供了先进的工具,用于监控和诊断 JVM 性能问题,使开发者更容易识别和解决应用中的瓶颈。
  • 改进的弃用机制:Java 21 对弃用系统进行了优化,为开发者提供了更清晰的弃用 API 指南,包括更好的文档和过渡路径。
  • 增强的云原生开发 API:随着云原生应用的趋势增长,Java 21 引入了简化在云环境中开发、部署和管理应用的 API 和框架。
posted @   leepandar  阅读(25)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
点击右上角即可分享
微信分享提示