比较 JDK 8 与 JDK 17 的区别

这篇具有很好参考价值的文章主要介绍了比较 JDK 8 与 JDK 17 的区别。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

        随着技术的不断发展,Java 也在不断地推出新版本以满足开发者的需求。在本文中,我们将比较两个重要版本:JDK 8 和 JDK 17。JDK 8 是 Java 发展史上的一个里程碑,引入了很多新特性,如 Lambda 表达式和 Stream API。而 JDK 17 是一个长期支持(LTS)版本,也引入了许多新特性和性能改进。让我们深入了解这两个版本之间的主要区别。

1. 新特性

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 架构设备。

2. 性能改进

JDK 17 相较于 JDK 8 在性能方面也有很多优化,主要包括:

  • 垃圾回收器(GC)的改进:JDK 17 引入了 ZGC 和 Shenandoah,这两个垃圾回收器在低延迟和高吞吐量方面表现优秀,同时提高了内存管理效率。
  • 编译器优化:JDK 17 中的 JIT 编译器进行了许多性能优化,提高了代码执行速度。
  • 紧凑字符串:JDK 17 对字符串内部存储进行了优化,降低了字符串占用的内存空间。

3. 可维护性和稳定性

JDK 17 作为一个长期支持版本,其可维护性和稳定性得到了很大程度的提升:

  • 模块化:从 JDK 9 开始,Java 引入了模块化系统(Project Jigsaw),使得开发者可以更轻松地构建和维护大型项目。
  • 新的 API 和类:JDK 17 提供了许多新的 API 和类,以帮助开发者更快速、更安全地完成开发任务。
  • 长期支持:Oracle 提供了长期支持,确保在未来几年内,JDK 17 会得到性能优化、安全更新和错误修复。

4.代码举例说明语法新特性

instanceof关键词

public String getMessage(Object obj) {
    if (obj instanceof String s) {
        return "String: " + s;
    } else if (obj instanceof Integer i) {
        return "Integer: " + i;
    } else {
        return "Unknown type";
    }
}

Sealed类

public sealed class Shape permits Circle, Rectangle {
    // ...
}

public final class Circle extends Shape {
    // ...
}

public final class Rectangle extends Shape {
    // ...
}

文本块

/**
 * 文本块对比
 */
public class TextBlock {
    /**
     * 使用JDK8返回HTML文本
     * @return 返回HTML文本
     */
    public static final String getHtmlTextInJDK8() {
        return "<html>\n" +
                "  <body>\n" +
                "    <p>Hello, world</p>\n" +
                "  </body>\n" +
                "</html>";
    }

    /**
     * 使用JDK17返回HTML文本
     * @return 返回HTML文本
     */
    public static final String getHtmlTextInJDK17() {
        return """
                    <html>
                      <body>
                        <p>Hello, world</p>
                      </body>
                    </html>
                """;
    }
}

NullPointerException增强

public static void main(String[] args) {
        String str = null;
        int length = str.length();
        System.out.println("length = " + length);
    }

报错信息非常清晰地指出来了是哪个对象为空导致出现的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)

Records

全新的switch表达式和模式匹配

    /**
     * 在JDK17中获取switch返回值
     * @param week
     * @return
     */
    public int getCodeInJDK17(Week week) {
        // 1, 现在的switch变成了表达式,可以返回值了,而且支持yield和->符号来返回值
        // 2, 再也不用担心漏写了break,而导致出问题了
        // 3, case后面支持写多个条件
        return switch (week) {
            case null -> -1;
            case MONDAY, TUESDAY -> 1;
            case WEDNESDAY -> 3;
            case THURSDAY -> { yield 4; }
            case FRIDAY -> 5;
            case SATURDAY -> 6;
            case SUNDAY -> 7;
            default -> 0;
        };
    }

全新的HttpClient

try catch资源关闭优化

结论

        JDK 8 和 JDK 17 都是 Java 发展历程中非常重要的版本。尽管 JDK 8 引入了许多新特性和改进,但 JDK 17 作为长期支持版本,在性能、可维护性和稳定性方面都有显著优势。如果您正在考虑升级或选择一个 Java 版本作为项目的基础,JDK 17 无疑是一个值得推荐的选择。文章来源地址https://www.toymoban.com/news/detail-594805.html

到了这里,关于比较 JDK 8 与 JDK 17 的区别的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 微服务 Spring Cloud 2021 Spring Boot 2.7.x Java JDK8升级到JDK17研究

    项目正在使用jdk8 如果要升级到jdk17 则需要升级springboot版本及springcloud版本 (springcloud版本和springboot版本必须匹配 要一块升级) 。目前使用的版本如下: spring boot 版本为 2.1.5.RELEASE spring cloud 版本为 Greenwich.SR2 spring 版本为 5.1.7.RELEASE jdk 由 8 升级到 17 spring boot 由 2.1.5.RELEASE

    2024年02月01日
    浏览(56)
  • 【Java学习】-Java JDK 1.8与17版本比较

    Java Development Kit(JDK)是Java编程语言的开发环境。它包含了Java编译器(javac)、Java虚拟机(JVM)以及其他必需的工具和库。本文将比较JDK 1.8和17两个版本,分析它们的发展历史和地位,并探讨它们之间的差异和优势。 JDK 1.8,也称为Java 8,于2014年发布。它是Java平台自2006年以

    2024年02月16日
    浏览(46)
  • Mac卸载jdk8,安装jdk17

    本次操作基于MacBook 因为工作需要,需要将jdk版本由jdk8升级到jdk17,同一台机器上是可以同时安装多个版本的jdk的,但是为了避免一些冲突和未知问题,这里直接卸载旧版本jdk,然后再重新安装新版本。 先查看本机安装的jdk: 删除java运行环境: 到java的目录,用ls命令查看机

    2024年02月08日
    浏览(67)
  • JDK8-JDK17版本升级

    记录Records是添加到 Java 14 的一项新功能。它允许你创建用于存储数据的类。它类似于 POJO 类,但代码少得多;大多数开发人员使用 Lombok 生成 POJO 类,但是有了记录,你就不需要使用任何第三方库。 sealed将类的继承限制为一组有限的子类 密封类的子类可以声明为fina

    2024年01月17日
    浏览(45)
  • JDK8,JDK11,JDK17,JDK21及中间版本主要更新特性

    官方地址: https://www.oracle.com/java/technologies/java-se-support-roadmap.html 从上图可以很清晰得可以看出,JDK7,JDK8,JDK11,JDK17,JDK21是长期维护的版本。从目前来看,JDK8到2023年已经有将近10年的历史了,大多数依据JDK8的相关技术内容已经很成熟了,但是大家也看到,JDK在不断地迭代,JD

    2024年02月21日
    浏览(61)
  • JDK8和JDK17安装切换,IDEA配置多个版本JDK

    JAVA之父高斯林推荐我们用JDK17,请尽快离开JDK8。JDK17 LTS在每个维度上都是一个巨大的飞跃: 在Java 17正式发布之前,Java开发框架Spring率先在官博宣布,Spring Framework 6和Spring Boot 3计划在2022年第四季度实现总体可用性的高端基线: Java 17+(来自 Spring Framework 5.3.x 线中的 Java 8-17)

    2023年04月27日
    浏览(64)
  • JDK8升级JDK17过程中遇到的那些坑

    JDK8虽然非常好,但是JDK版本已经发布到JDK20了,且JDK8后的版本升级了很多新的特性,如模块化、ZGC以及虚拟线程、结构性并发等,也是非常有吸引力的,所以决定将基于JDK8的项目升级到最近的LTS版本JDK17。 下载JDK17的最新版本 jdk-17_linux-x64_bin.tar.gz ,解压缩后移动到 /usr/lib

    2024年02月11日
    浏览(42)
  • 一文详解|从 JDK8 飞升到 JDK17,再到未来的 JDK21

    🚀 Lambda 表达式和函数式接口 定义 :允许将函数作为一个方法的参数(函数作为参数)或将代码作为数据(函数作为值)。 示例 : (a, b) - a + b 🔖 类型注解 定义 :提供了在任何使用类型的地方添加注解的能力。 示例 : @NonNull String name; 📅 新的日期/时间 API 定义 :全新的

    2024年01月17日
    浏览(40)
  • ubuntu22.04 安装jdk8,jdk11,jdk17,jdk21 并且便于切换

    您已经创建了一个非常实用的shell函数 setJavaHome 来切换不同版本的JDK环境。这个函数定义了如何根据传入的参数来更改 JAVA_HOME 环境变量,并更新 PATH 环境变量以包含新的 JAVA_HOME 路径。 要在Ubuntu 22.04上安装多个JDK版本并使用这个函数来切换它们,您需要按照以下步骤操作:

    2024年02月04日
    浏览(58)
  • JDK8、JDK11、JDK17和JDK21这几个版本更新的主要特性

    JDK8 是 Java 的一个重大更新版本,引入了一系列新特性和改进,主要包括: Lambda 表达式: Lambda 表达式允许我们以简洁、函数式的方式编写代码,使代码更易于理解和维护。- Stream API : Stream API 提供了一套声明式处理数据的方式,使得对集合和数组的操作更加直观和高效。

    2024年04月29日
    浏览(50)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包