jdk8至jdk17新增特性

以下是从Java 8(JDK 8)到Java 17(JDK 17)各个版本之间的主要区别和新增特性:

  1. Java 8(JDK 8)

    • Lambda表达式:Lambda表达式允许将函数作为方法参数传递,使得代码更加简洁、易读。它还可以用于实现函数式接口的实例。

    • 函数式接口:只包含一个抽象方法的接口。Java 8引入了@FunctionalInterface注解,以显式指定一个接口是函数式接口。

    • Stream API:一种新的数据处理工具,可以对集合进行函数式编程操作,例如过滤、映射、归约等。Stream API支持并行处理,有助于提高性能。

    • Optional类:一种包装器类,用于表示一个值可能存在也可能不存在。它有助于避免空指针异常,提高代码的健壮性。

    • 接口的默认方法和静态方法:Java 8允许在接口中定义带有实现的默认方法和静态方法,有助于在不破坏现有实现的情况下向接口添加新方法。

    • 新的日期和时间API:Java 8引入了全新的日期和时间API,提供了不可变的日期和时间类,如LocalDateLocalTimeLocalDateTime等,以及用于解析、格式化日期和时间的类,如DateTimeFormatter

    • Nashorn JavaScript引擎:一种新的JavaScript引擎,允许在Java应用程序中嵌入和执行JavaScript代码。

    • 并行数组操作:Java 8引入了Arrays.parallelSort()等方法,以支持对数组进行并行操作,从而提高性能。

    • 新的收集器:Java 8引入了许多新的收集器,如Collectors.toList()Collectors.toSet()等,以便将Stream API操作的结果收集到集合中。

    • CompletableFuture:Java 8中的CompletableFutureFuture的增强版本,它提供了更丰富的API,支持异步编程、管道化操作和组合多个异步任务。

  2. Java 9(JDK 9)

    • JEP 261: 模块系统(Java Platform Module System,JPMS):这是 Java 9 中最显著的变化,它将 JDK 划分为一组模块,以提高封装性、安全性和可维护性。模块系统还允许开发者在自己的应用程序中使用模块,提高代码的可组织性和可维护性。

    • JEP 223: 新的版本号方案:Java 9 引入了一个新的版本号方案,使版本号更加简洁且易于理解。

    • JEP 222: jshell(Java Shell):Java 9 引入了一个交互式 REPL(Read-Eval-Print Loop)工具,名为 jshell,它允许开发者在不编写完整的 Java 类的情况下快速尝试 Java 代码片段。

    • JEP 254: Compact Strings:这个特性优化了 Java 中字符串的内存表示,将大多数字符串的内存占用减少了一半,从而提高了性能。

    • JEP 238: 多发行版 JAR 文件:这个特性允许将针对不同 Java 版本的类文件打包到同一个 JAR 文件中,简化了跨版本的 Java 应用程序部署。

    • JEP 282: jlink 工具:这个特性引入了一个新的工具 jlink,它允许开发者创建自定义的 Java 运行时映像,仅包含应用程序所需的模块,从而减小应用程序的体积。

    • JEP 266: 增强的 Java 并发 API:Java 9 对 java.util.concurrent 包进行了扩展和改进,引入了 CompletableFuture API 的改进以及新的 Reactive Streams API。

    • JEP 193: 变量句柄(Variable Handles):这个特性提供了一种更灵活、更高效的方式来访问对象的字段,类似于 java.util.concurrent.atomic 中的 Atomic 类,但更通用。

    • JEP 259: Stack-Walking API:这个特性引入了一个新的 API,用于在 Java 中遍历和过滤堆栈跟踪,提高了堆栈处理的性能。

    • JEP 102: 进程 API 更新:这个特性对 Java 的进程 API(java.lang.Process)进行了改进,提供了更好的操作系统进程控制和管理。

  3. Java 10(JDK 10)

    • JEP 286: 局部变量类型推断(Local-Variable Type Inference):这个特性引入了关键字 var,允许开发者在声明局部变量时省略变量类型,让编译器自动推断类型。这使得代码更简洁,提高了可读性。

    • JEP 296: 废弃并移除工具和 API:此特性废弃了一些不再使用的工具和 API,为未来的 Java 版本提供了更加干净的基础。

    • JEP 204: 基于垃圾回收的并发线程堆栈处理:这个特性为 G1 垃圾收集器引入了并发线程堆栈处理功能,提高了垃圾回收的性能。

    • JEP 307: 并行全 GC:这个特性使 G1 垃圾收集器的全 GC(Full GC)过程并行化,从而提高了 G1 的性能和可预测性。

    • JEP 312: 应用类数据共享(Application Class-Data Sharing):这个特性允许将应用程序类的元数据存储在共享归档中,从而提高了应用程序的启动速度和响应性。

    • JEP 319: 根证书:将一组根证书添加到 OpenJDK,以便 OpenJDK 可以和 Oracle JDK 在安全性方面保持一致。

    • JEP 322: 新的版本号方案:此特性为 Java 版本号提供了更简单、更清晰的表示。

  4. Java 11(JDK 11)

    • JEP 181: Epsilon:一个无操作(No-Op)垃圾收集器。这个特性主要用于测试和性能分析,它不会回收任何内存,从而帮助开发者识别和分析垃圾回收对应用性能的影响。

    • JEP 309: 动态类文件常量(Dynamic Class-File Constants):引入了一种新的常量池表达式,可以在运行时动态解析。这个特性允许更紧凑、更高效的表示,提高了性能和可扩展性。

    • JEP 315: 改进 AArch64 架构的支持:此特性旨在为 AArch64(ARM64)架构提供更好的支持,提高 Java 在这个平台上的性能。

    • JEP 318: 基于 Epsilon 的低延迟垃圾收集器(ZGC):这是一种新型的垃圾收集器,旨在实现可扩展性、低延迟和高吞吐量。ZGC 通过并发的、多阶段的回收策略来降低停顿时间。

    • JEP 320: 移除 Java EE 和 CORBA 模块:这个特性从 JDK 中移除了 Java EE 和 CORBA 相关的模块,以减小 JDK 的体积,降低维护成本。这些模块在 Java 9 中就已被标记为废弃。

    • JEP 321: HTTP 客户端(标准):此特性将 Java 9 和 Java 10 中的 HTTP 客户端 API 作为标准功能引入,支持 HTTP/1.1 和 HTTP/2,以及 WebSocket。新的 API 也支持同步和异步编程模式。

    • JEP 323: 局部变量语法的改进:这个特性改进了使用 var 声明局部变量的语法,使得 var 可以用于 Lambda 参数。

    • JEP 324: Key Agreement with Curve25519 and Curve448:为 Java 密码学框架引入了两种新的椭圆曲线,提高了加密安全性。

    • JEP 327: Unicode 10:更新了 Java 平台的 Unicode 支持,以包含 Unicode 10 标准中的新字符集和属性。

    • JEP 328: Flight Recorder:这是一个低开销的数据收集框架,可以用于生产环境中的问题诊断和性能分析。

    • JEP 331: 低开销分析事件(JVM Low-Overhead Heap Profiling):这个特性提供了一种低开销的方法来收集堆内存分配的分析数据。它引入了一种新的抽样分析机制,允许在生产环境中监控和分析内存使用情况。

    • JEP 332: Transport Layer Security (TLS) 1.3:这个特性为 Java 添加了对 TLS 1.3 协议的支持,提高了 Java 在网络安全方面的能力。

  5. Java 12(JDK 12)

    • JEP 189: Shenandoah:一个低暂停时间的垃圾收集器。Shenandoah 是一种并发垃圾收集器,它的目标是降低 GC 停顿时间,适用于具有大堆内存的应用程序。

    • JEP 230: 微基准测试套件(Microbenchmark Suite):这个特性引入了一组基准测试,用于衡量 JDK 组件的性能。这有助于开发者评估新特性、优化和回归的性能影响。

    • JEP 325: Switch 表达式(预览):这个特性引入了一种新的 switch 表达式语法,使得 switch 语句更简洁、更安全。此特性在 Java 12 中作为预览功能引入,最终在 Java 14 中成为正式特性。

    • JEP 334: JVM 常量 API:这个特性引入了一组 API,用于对 JVM 类文件中的常量进行模型化。这有助于开发者更轻松地操作和分析 Java 类文件。

    • JEP 340: ZGC(Z Garbage Collector)的一致性和可用性改进:此特性改进了 ZGC 的性能和可用性,使其在 Windows 和 macOS 上可用。

    • JEP 341: 默认的 CDS(Class Data Sharing)归档:此特性引入了默认的类数据共享归档,用于加速 JVM 的启动速度。

    • JEP 344: Abortable Mixed Collections for G1:此特性改进了 G1 垃圾收集器的性能,使其在发生长时间暂停时可以中止混合收集。

  6. Java 13(JDK 13)

    • JEP 350: 动态 CDS 归档:此特性允许将应用程序类的元数据存储在共享归档中,以便在应用程序的多个 JVM 实例之间共享。这有助于提高应用程序的启动速度和减少内存占用。

    • JEP 351: ZGC 的并发类卸载:此特性为 Z 垃圾收集器(ZGC)添加了并发类卸载的支持,从而进一步降低 GC 停顿时间。

    • JEP 353: 重新实现遗留的 Socket API:此特性引入了一个新的、现代化的 Socket API,用于替代遗留的、基于阻塞 I/O 的 API。新的 API 提供了更好的性能和可扩展性。

    • JEP 354: Switch 表达式(第二次预览):这个特性继续完善了 Java 12 中引入的 switch 表达式,并在 Java 13 中作为预览功能提供。这个改进使 switch 语句更简洁、更安全。最终在 Java 14 中成为正式特性。

    • JEP 355: 文本块(预览):这个特性引入了文本块(也称为多行字符串字面量),使得编写多行字符串更加简单和易读。文本块在 Java 13 中作为预览功能引入,最终在 Java 15 中成为正式特性。

  7. Java 14(JDK 14)

    • JEP 305: instanceof 的模式匹配(预览):这个特性引入了模式匹配的概念,它可以简化 instanceof 操作的使用,使代码更简洁、更易读。在 Java 14 中作为预览功能引入。

    • JEP 343: Packaging Tool(Incubator):此特性引入了一个新的打包工具(jpackage),用于将 Java 应用程序打包为平台特定的可执行文件。这有助于改进应用程序的部署和分发。

    • JEP 345: NUMA-Aware Memory Allocation for G1:此特性为 G1 垃圾收集器添加了对非统一内存访问(NUMA)的支持,以提高性能。

    • JEP 349: JFR Event Streaming:这个特性引入了 Java Flight Recorder(JFR)事件流,允许开发者实时处理 JFR 事件,而无需等待事件文件的生成。

    • JEP 352: 非易失性映射的文件通道 API:这个特性为 java.nio.channels.FileChannel 类添加了新的 API,以支持非易失性内存(Non-Volatile Memory,NVM)映射。

    • JEP 358: 有用的 NullPointerException:此特性改进了 NullPointerException 的描述性信息,帮助开发者更轻松地诊断和修复问题。

    • JEP 359: Records(预览):这个特性引入了一种新的数据类,称为记录(Record),可以简化数据类的编写。在 Java 14 中作为预览功能引入,最终在 Java 16 中成为正式特性。

    • JEP 361: Switch 表达式(正式):这个特性将 Java 12 和 13 中引入的 switch 表达式作为正式功能引入。新的 switch 语法使得 switch 语句更简洁、更安全。

  8. Java 15(JDK 15)

    • JEP 339: Edwards-Curve Digital Signature Algorithm (EdDSA): 此特性引入了对 Edwards-Curve 数字签名算法 (EdDSA) 的支持,这是一种现代的加密算法,提供了更高的安全性和性能。

    • JEP 360: Sealed Classes (预览): 该特性引入了封装类和接口,使得类的继承结构可以限制在某些明确指定的类中。这有助于提高模型的安全性和可维护性。

    • JEP 371: Hidden Classes: 这个特性引入了一种新的类种类——隐藏类,这些类不能被直接引用,主要用于框架和运行时生成类。

    • JEP 372: Remove the Nashorn JavaScript Engine: 这个特性移除了 Nashorn JavaScript 引擎。Nashorn 在早期版本中已被标记为废弃,现在正式被移除。

    • JEP 374: Disable and Deprecate Biased Locking: 该特性禁用了偏向锁,并计划在未来的版本中移除。偏向锁是一种优化手段,但对于现代应用程序的影响变得不明显。

    • JEP 375: Pattern Matching for instanceof (第二次预览): 这个特性继续完善了 Java 14 中引入的 instanceof 的模式匹配,并在 Java 15 中作为预览功能提供。这个改进使 instanceof 操作更简洁、更安全。

    • JEP 377: ZGC: A Scalable Low-Latency Garbage Collector (正式): 此特性将 Z 垃圾收集器(ZGC)作为正式功能引入。ZGC 是一种低延迟、可伸缩的垃圾收集器,适用于具有大堆内存的应用程序。

    • JEP 378: Text Blocks (正式): 这个特性将 Java 13 中引入的文本块(也称为多行字符串字面量)作为正式功能引入。文本块使编写多行字符串更加简单和易读。

    • JEP 379: Shenandoah: A Low-Pause-Time Garbage Collector (正式): 此特性将 Shenandoah 垃圾收集器作为正式功能引入。Shenandoah 是一种低暂停时间的垃圾收集器,适用于具有大堆内存的应用程序。

    • JEP 381: Remove the Solaris and SPARC Ports: 该特性移除了对 Solaris 和 SPARC 平台的支持,这是因为这些平台的使用率已经降低。

  9. Java 16(JDK 16)

    • JEP 338: Vector API (Incubator):此特性引入了一个新的矢量 API,用于在 Java 中表达和操作矢量计算。这有助于实现更高性能的数学和图形操作。

    • JEP 347: Enable C++14 Language Features:此特性更新了 JDK 源代码,以允许使用 C++14 语言特性。这有助于提高 JDK 的代码质量和可维护性。

    • JEP 357: Migrate from Mercurial to Git:此特性将 JDK 的版本控制系统从 Mercurial 迁移到 Git,以提高工作效率和降低存储成本。

    • JEP 369: Migrate to GitHub:此特性将 JDK 的开发从自托管的 Git 仓库迁移到 GitHub,以提高开发效率和协作。

    • JEP 376: ZGC: Concurrent Thread-Stack Processing:此特性为 Z 垃圾收集器(ZGC)引入了并发线程栈处理,从而进一步降低垃圾收集的暂停时间。

    • JEP 380: Unix-Domain Socket Channels:这个特性引入了对 Unix 域套接字通道的支持,允许在同一主机上的进程之间进行高效的通信。

    • JEP 386: Alpine Linux Port:此特性引入了对 Alpine Linux 和 musl C 库的支持,从而使 Java 可以在轻量级的容器环境中运行。

    • JEP 387: Elastic Metaspace:此特性改进了类元数据的内存管理,使其更加灵活和高效,从而降低内存占用和提高性能。

    • JEP 389: Foreign Function & Memory API (Incubator):此特性引入了一种新的 API,用于在 Java 中访问本地代码和内存。这有助于简化本地资源的访问和操作。

    • JEP 390: Warnings for Value-Based Classes:此特性引入了针对值类型的警告,以提醒开发者注意与值类型相关的潜在问题。

    • JEP 392: Packaging Tool:这个特性正式引入了 jpackage 打包工具,用于将 Java 应用程序打包为平台特定的可执行文件。

    • JEP 393: Foreign Function & Memory API (第二次孵化):此特性继续完善和扩展第一次孵化的 Foreign Function & Memory API。

    • JEP 394: Pattern Matching for instanceof:这个特性正式引入了模式匹配的概念,它可以简化 instanceof 操作的使用,使代码更简洁、更易读。

    • JEP 395: Records:此特性正式引入了记录(Record)类,这是一种简化数据类定义的方法。记录类可以减少样板代码并提高代码的可读性和不变性。

    • JEP 396: Strongly Encapsulate JDK Internals by Default:此特性默认强化了 JDK 内部 API 的封装,以提高安全性和可维护性。开发者可以通过命令行选项来放宽封装限制,但这不是推荐的做法。

    • JEP 397: Sealed Classes (第二次预览):此特性继续完善 JDK 15 中引入的封装类(Sealed Class)概念,并在 Java 16 中作为预览功能提供。封装类和接口可以限制继承结构,提高模型的安全性和可维护性。

  10. Java 17(JDK 17)

    • Java 17(JDK 17)是一个长期支持(LTS)版本,相对于前一个LTS版本(Java 11)以及Java 16,它引入了以下新特性:

    • JEP 356: Enhanced Pseudo-Random Number Generators:这个JEP为伪随机数生成器(PRNGs)提供了一个新的更强大的API,允许用户更方便地选择和配置不同的PRNG算法。

    • JEP 382: New macOS Rendering Pipeline:引入了一个新的渲染管线,用于在macOS平台上替换现有的Quartz管线,改进图形性能。

    • JEP 389: Foreign Function & Memory API (Incubator):这个功能为调用本地代码(如C和C++)提供了一个新的API,使得在Java代码中更容易地访问本地库和本地内存。

    • JEP 411: Deprecate the Security Manager for Removal:这个JEP计划逐步移除Java中的Security Manager和相关API,因为它们已经不再适应现代应用程序的安全需求。

    • JEP 391: macOS/AArch64 Port:这个JEP为基于Apple M1芯片的macOS/AArch64平台提供了Java的支持。

    • JEP 398: Deprecate the Applet API for Removal:这个JEP计划移除Java中已过时的Applet API,因为现代Web浏览器已经不再支持Java Applets。

    • JEP 347: Enable C++14 Language Features:这个JEP允许在JDK源代码中使用C++14语言特性,以便更好地支持跨平台的开发。

    • JEP 376: ZGC: Concurrent Thread-Stack Processing:这个JEP为Z垃圾收集器带来了并发线程栈处理功能,提高了垃圾回收的性能。

    • JEP 390: Warnings for Value-Based Classes:这个JEP为值类型类添加了警告,以提醒开发者在使用这些类时注意同步和标识敏感的操作。

    • JEP 394: Pattern Matching for switch(正式版):这个JEP将Java 12和13中预览的Pattern Matching for switch功能引入为正式功能,增强了switch语句的功能,使其更加简洁和可读。

    • JEP 395: Records(正式版):这个JEP将Java 14和15中预览的Records功能引入为正式功能,简化了数据类的创建过程。

    • JEP 396: Sealed Classes(正式版):这个JEP将Java 15和16中预览的Sealed Classes功能引入为正式功能,限制类的可扩展性,提高了封装性

    • JEP 386: Alpine Linux Port 为 Alpine Linux 及其基于 musl 的 C 库提供了 Java 支持。Alpine Linux 是一个轻量级、安全的 Linux 发行版,广泛应用于容器环境。JEP 386 让 Java 开发者更容易在 Alpine Linux 上部署和运行 Java 应用程序,节省资源并提高安全性。

    • JEP 376: ZGC: Concurrent Thread-Stack Processing:这个JEP为Z垃圾收集器带来了并发线程栈处理功能,提高了垃圾回收的性能。

    • JEP 377: ZGC: A Scalable Low-Latency Garbage Collector (Production):这个JEP将ZGC提升为正式功能,ZGC是一款可扩展的低延迟垃圾回收器,目标是在保持低延迟的同时提高应用的吞吐量。

    • JEP 387: Elastic Metaspace:这个JEP旨在减少Java元空间的内存使用,提高内存分配和回收的响应速度。

    • JEP 389: Foreign Function & Memory API (Incubator):这个JEP引入了一个新的API,用于在Java中调用本地代码(如C和C++),使得跨平台本地代码调用变得更加简单。

    • JEP 390: Warnings for Value-Based Classes:为值类型类添加警告,以提醒开发者在使用这些类时注意同步和标识敏感的操作。

    • JEP 392: Packaging Tool:这个JEP引入了一个新的命令行工具jpackage,用于将Java应用程序打包为平台特定的格式,如Windows的msi、macOS的dmg或Linux的rpm和deb文件。

    • JEP 394: Pattern Matching for switch (Preview):这个JEP为switch语句引入了模式匹配功能,使其更加简洁和可读。

    • JEP 396: Strongly Encapsulate JDK Internals by Default:这个JEP默认强烈封装JDK内部API,以提高安全性和可维护性。

你可能感兴趣的:(jvm,java,开发语言)