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特性支持 | 微服务、云原生架构 |