随着技术的不断发展,Java 也在不断地推出新版本以满足开发者的需求。在本文中,我们将比较两个重要版本:JDK 8 和 JDK 17。JDK 8 是 Java 发展史上的一个里程碑,引入了很多新特性,如 Lambda 表达式和 Stream API。而 JDK 17 是一个长期支持(LTS)版本,也引入了许多新特性和性能改进。让我们深入了解这两个版本之间的主要区别。
JDK 8:
- Lambda 表达式:简化了匿名内部类的写法,提高了代码的可读性和简洁性。
- Stream API:提供了一种新的数据处理方式,可以更简洁、更高效地处理集合。
- 接口默认方法和静态方法:允许在接口中定义默认方法和静态方法,提高了接口的灵活性和扩展性。
- 日期和时间 API(Java.time):全新的日期和时间处理 API,取代了以前的不直观且容易出错的 Calendar 和 Date 类。
JDK 17:
- JEP 356: Enhanced Pseudo-Random Number Generators:引入了新的伪随机数生成器 API,提供了更强大、更灵活的随机数生成能力。
- JEP 389: Foreign Function & Memory API (Incubator):提供了一种新的、更安全的方式来调用本地代码(如 C 语言代码)和操作本地内存。
- JEP 411: Deprecate the Security Manager for Removal:宣布 Security Manager 将在未来版本中被移除,标志着 Java 平台安全模型的重大转变。
- JEP 391: macOS/AArch64 Port:为 macOS/AArch64 平台提供了一个新的 JDK 版本,以支持 Apple M1 芯片等 ARM 架构设备。
JDK 17 相较于 JDK 8 在性能方面也有很多优化,主要包括:
- 垃圾回收器(GC)的改进:JDK 17 引入了 ZGC 和 Shenandoah,这两个垃圾回收器在低延迟和高吞吐量方面表现优秀,同时提高了内存管理效率。
- 编译器优化:JDK 17 中的 JIT 编译器进行了许多性能优化,提高了代码执行速度。
- 紧凑字符串:JDK 17 对字符串内部存储进行了优化,降低了字符串占用的内存空间。
JDK 17 作为一个长期支持版本,其可维护性和稳定性得到了很大程度的提升:
- 模块化:从 JDK 9 开始,Java 引入了模块化系统(Project Jigsaw),使得开发者可以更轻松地构建和维护大型项目。
- 新的 API 和类:JDK 17 提供了许多新的 API 和类,以帮助开发者更快速、更安全地完成开发任务。
- 长期支持:Oracle 提供了长期支持,确保在未来几年内,JDK 17 会得到性能优化、安全更新和错误修复。
instanceof关键词
Sealed类
文本块
NullPointerException增强
报错信息非常清晰地指出来了是哪个对象为空导致出现的NPE问题
Exception in thread "main" java.lang.NullPointerException: Cannot invoke "String.length()" because "str" is null at com.example.demo.DemoApplicationTests.main(DemoApplicationTests.java:34)