不同版本JDK的区别

2024-05-23  
0条评论   173浏览

JDK版本区别

JDK 8:

Lambda表达式:Lambda表达式允许以更简洁的方式表示匿名函数,这是JDK 8中最重要的新特性之一。

新的日期API:JDK 8引入了新的日期和时间API,以改进旧的Date和Calendar类的不足。

Optional类:Optional类是一个可以为null的容器对象,如果值存在则isPresent()方法返回true,调用get()方法会返回该对象。

Base64编码/解码:JDK 8内置了对Base64编码的支持。

接口的默认方法和静态方法:JDK 8允许在接口中添加默认方法和静态方法。

Stream API:Stream API允许以声明性方式处理数据集合,如过滤、映射、排序和聚合等。

其他特性还包括方法引用、注解相关的改变等。

JDK 11:

性能优化:JDK 11对JVM和线程调度进行了优化,使多线程程序在运行时更加高效。

TLS 1.3支持:JDK 11引入了对TLS 1.3的支持,提高了网络传输数据的安全性。

飞行记录器(JFR):JDK 11将Java飞行记录器从Oracle JDK开源到了Open JDK,使其成为JDK 11的一部分。JFR是一种低开销的事件信息收集框架,用于对应用程序和JVM进行故障检查和分析。

局部变量类型推断:JDK 11增强了局部变量类型推断的能力,允许在lambda表达式中使用var关键字来声明参数类型。

HTTP Client API标准化:JDK 11标准化了Java 9中引入的HTTP Client API,并在Java 10中进行了更新,现在已完全支持异步非阻塞。

JDK 17:

Switch表达式新增匹配模式:JDK 17增强了switch表达式的功能,允许使用类型模式和守卫模式进行匹配。

文本块:JDK 17引入了文本块(多行字符串字面量),使编写多行字符串更加简洁和易读。

密封类(sealed class):密封类是一种限制子类化的类,可以提高代码的可读性和可维护性。

特定于上下文的反序列化过滤器:JDK 17提供了特定于上下文的反序列化过滤器,可以提高应用程序的安全性。

其他新特性还包括增强的伪随机数生成器、对NullPointerExceptions的优化等。

JDK 21:

虚拟线程(Virtual Threads):JDK 21引入了虚拟线程的概念,也称为轻量级线程或纤程。虚拟线程可以极大地提高并发编程的效率和可伸缩性。

字符串模板:JDK 21提供了更强大的字符串模板功能,可以方便地构建和格式化字符串。

序列集合:JDK 21引入了序列集合的概念,可以方便地处理有序集合和映射。

分代ZGC:JDK 21改进了垃圾回收机制,引入了分代ZGC(Z Garbage Collector),可以进一步提高应用程序的性能和响应速度。

记录模式和switch模式匹配:JDK 21进一步扩展了JDK 17中的模式匹配功能,允许在记录类型和switch表达式中使用更复杂的模式匹配。

发行区别

名称 作者 支持版本 社区活跃度(github star) 特性 适用场景
HotSpot (Oracle JDK版) Oracle 所有版本 高(闭源) 使用最广泛,稳定可靠,社区活跃JIT支持Oracle JDK默认虚拟机 默认
HotSpot (Open JDK版) Oracle 所有版本 中(16.1k) 同上开源,Open JDK默认虚拟机 默认对JDK有二次开发需求
GraalVM Oracle 11, 17,19企业版支持8 高(18.7k) 多语言支持高性能、JIT、AOT支持 微服务、云原生架构需要多语言混合编程
Dragonwell JDK龙井 Alibaba 标准版 8,11,17扩展版11,17 低(3.9k) 基于OpenJDK的增强高性能、bug修复、安全性提升JWarmup、ElasticHeap、Wisp特性支持 电商、物流、金融领域对性能要求比较高
Eclipse OpenJ9 (原 IBM J9) IBM 8,11,17,19,20 低(3.1k) 高性能、可扩展JIT、AOT特性支持 微服务、云原生架构