当前位置: 代码网 > it编程>编程语言>Java > 一文详细梳理JDK 21相比JDK 8的主要新特性

一文详细梳理JDK 21相比JDK 8的主要新特性

2026年02月08日 Java 我要评论
从 jdk 8(2014年3月发布)到 jdk 21(2023年9月发布)的9年时间里,java经历了巨大的变革。以下是主要的新特性对比:一、语言特性重大革新1.模块系统(jigsaw)- jdk 9

从 jdk 8(2014年3月发布)到 jdk 21(2023年9月发布)的9年时间里,java经历了巨大的变革。以下是主要的新特性对比:

一、语言特性重大革新

1.模块系统(jigsaw)- jdk 9

  • 模块化jdk和应用程序,解决jar地狱问题

  • module-info.java 文件定义模块依赖

2.局部变量类型推断(var)- jdk 10

java

// jdk 8
list<string> list = new arraylist<>();

// jdk 10+
var list = new arraylist<string>();
var stream = list.stream();

3.文本块(text blocks)- jdk 15正式

java

// jdk 8
string html = "<html>\n" +
              "    <body>\n" +
              "        <p>hello</p>\n" +
              "    </body>\n" +
              "</html>\n";

// jdk 15+
string html = """
    <html>
        <body>
            <p>hello</p>
        </body>
    </html>
    """;

4.记录类(records)- jdk 16正式

java

// jdk 8 - 需要大量样板代码
public class person {
    private final string name;
    private final int age;
    // 构造器、getter、equals、hashcode、tostring...
}

// jdk 16+
public record person(string name, int age) { }

5.模式匹配

  • instanceof模式匹配 - jdk 16正式

java

// jdk 8
if (obj instanceof string) {
    string s = (string) obj;
    system.out.println(s.length());
}

// jdk 16+
if (obj instanceof string s) {
    system.out.println(s.length());
}
  • switch表达式和模式匹配 - jdk 21正式

java

// jdk 21
string formatted = switch (obj) {
    case integer i -> string.format("int %d", i);
    case long l    -> string.format("long %d", l);
    case double d  -> string.format("double %f", d);
    case string s  -> string.format("string %s", s);
    default        -> obj.tostring();
};

6.密封类(sealed classes)- jdk 17正式

java

// 限制哪些类可以继承
public sealed interface shape 
    permits circle, rectangle, triangle { }

public final class circle implements shape { }
public final class rectangle implements shape { }

二、革命性并发特性

虚拟线程(virtual threads)- jdk 21正式

java

// 创建百万级轻量级线程
try (var executor = executors.newvirtualthreadpertaskexecutor()) {
    intstream.range(0, 100_000).foreach(i -> {
        executor.submit(() -> {
            thread.sleep(duration.ofseconds(1));
            return i;
        });
    });
}

三、api增强

1.集合工厂方法- jdk 9

java

// jdk 8 - 繁琐
list<string> list = new arraylist<>();
list.add("a");
list.add("b");
list = collections.unmodifiablelist(list);

// jdk 9+
list<string> list = list.of("a", "b", "c");
set<string> set = set.of("a", "b");
map<string, integer> map = map.of("a", 1, "b", 2);

2.stream api增强

  • takewhile/dropwhile - jdk 9

  • ofnullable - jdk 9

  • iterate增强 - jdk 9

3.optional增强- jdk 9+

java

// jdk 9+
optional.ifpresentorelse(
    value -> system.out.println(value),
    () -> system.out.println("空值")
);

4.http client api- jdk 11正式

java

// 取代httpurlconnection
httpclient client = httpclient.newhttpclient();
httprequest request = httprequest.newbuilder()
    .uri(uri.create("https://api.example.com"))
    .build();

httpresponse<string> response = 
    client.send(request, httpresponse.bodyhandlers.ofstring());

5.新的日期时间api增强- jdk 8已有,后续版本增强

java

// jdk 8引入,后续版本有增强
localdate date = localdate.now();
instant instant = instant.now();

四、性能与jvm改进

1.新的垃圾收集器

  • g1gc - jdk 9成为默认(替代parallel gc)

  • zgc - jdk 15生产就绪(低延迟)

  • shenandoah - jdk 12生产就绪(低暂停时间)

2.应用程序类数据共享(appcds)- jdk 10+

  • 减少启动时间,降低内存占用

3.jfr(java flight recorder)生产就绪- jdk 11

  • 性能诊断工具,现在免费使用

五、包和模块变化

java ee模块移除- jdk 11

  • jaxb、jax-ws、jaf等移到jakarta ee

  • 需要单独添加依赖

六、开发工具增强

1.jshell- jdk 9

  • java repl交互式环境

2.jpackage- jdk 16

  • 打包自包含的java应用程序

七、重要版本里程碑

版本年份关键特性
jdk 82014lambda、stream api、新日期时间api
jdk 92017模块系统、jshell、集合工厂方法
jdk 112018lts,局部变量类型推断,http client
jdk 172021lts,密封类、模式匹配增强
jdk 212023lts,虚拟线程、结构化并发、分代zgc

八、迁移建议

需要特别注意的变化:

  1. 包结构调整:java ee相关包已移除

  2. 默认gc改变:从parallel gc变为g1gc

  3. 模块化:大型应用需要考虑模块化

  4. api变化:许多api已被标记为废弃

立即价值:

  1. 虚拟线程 - 大幅提升并发性能

  2. 记录类 - 减少样板代码

  3. 模式匹配 - 更简洁的条件处理

  4. 文本块 - 更好的字符串处理

  5. zgc - 极低延迟垃圾回收

最低推荐版本:

  • 新项目:直接从jdk 21 lts开始

  • 生产系统:至少升级到jdk 17 lts

  • 遗留系统:考虑逐步迁移到jdk 11 lts作为中间步骤

jdk 21代表了java平台的重大飞跃,特别在并发编程方面带来了革命性的改进,是现代java开发的推荐起点。

总结

到此这篇关于详细梳理jdk21相比jdk8主要新特性的文章就介绍到这了,更多相关jdk21相比jdk8主要新特性内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2026  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com