应用开发

继 SpringBoot 3.0,Elasticsearch8.0 官宣:拥抱 Java 17

时间:2010-12-5 17:23:32  作者:IT科技   来源:域名  查看:  评论:0
内容摘要:大家好,我是君哥。新版任你发,我用 Java 8,这可能是当下 Java 开发者的真实写照。不过时代可能真的要抛弃 Java 8,全面拥抱 Java 17 了。Spring Boot 3.0前些天,相

大家好,官宣我是拥抱君哥。

新版任你发,官宣我用 Java 8,拥抱这可能是官宣当下 Java 开发者的真实写照。不过时代可能真的拥抱要抛弃 Java 8,全面拥抱 Java 17 了。官宣

Spring Boot 3.0

前些天,拥抱相信小伙伴们都注意到了,官宣SpringBoot 发布了 3.0.0-M1 版本,拥抱并官宣全面拥抱 Java 17,官宣下面的拥抱截图是 Release Notes 中的一段:

其他的新特性大家可以去 Github 查看。

https://github.com/spring-projects/spring-boot/wiki/Spring-Boot-3.0.0-M1-Release-Notes/16c166b5fb4232998a8cfd3966c2851ec1eddf02

Spring Boot 3.0.0-M1 版本发布,官宣也意味着 Spring Boot 进入 3.x 版本的拥抱迭代,同时也看到,官宣3.x 版本开始 Spring Boot 要全面拥抱 Java 17 了。

Elastic 8

凑巧的是,2022 年 2 月 11 日,Elastic 也发布了新版本 Elastic 8,这个版本跟上个版本间隔了 3 年。下面的截图是 Issue 79873:

可以看到,亿华云运行新的 Elasticsearch 版本需要 Java 17 了。

Java 17

从 Java 8 以后,每个版本发布都增加了哪些新特性呢?我们一起来看一下。

Java 9

私有接口方法默认垃圾收集器改为 G1HTTP client,支持 WebSocket、HTTP/2、HTTPS/TLS、非阻塞 API。

Java 10

局部变量类型推断,可以使用 var 类型来定义变量。不可变集合G1 支持并行 Full GC基于 Java 的 JIT 编译器 Graal支持在不执行全局安全点的情况下执行线程回调,这样可以在不停止所有线程的情况下停止单个线程。

Java 11

标准 HTTP Client 升级引入 ZGC 垃圾收集器Flight Recorder,可以收集基于 OS、JVM和JDK 事件产生的数据。对Stream、Optional、集合 API进行增强。

Java 12

引入 Switch 表达式Shenandoah GC 垃圾收集算法JMH 基准测试G1 支持可中断的 mixed GC,将 Mixed GC 拆分为强制部分和可选部分,强制部分一定会被回收,可选部分可以不被回收,这样垃圾收集过程中优先处理强制集,更容易满足暂停时间目标。G1 可以归还不使用的内存给操作系统

Java 13

switch 优化更新,增加 yield 关键字用于返回结果。云南idc服务商ZGC 支持将未使用的内存归还操作系统引入了文本块,可以使用 """ 三个引号表示文本块,示例代码如下:String html = """

Hello, world

""";

Java 14

instanceof 语法简化,可以直接给对象赋值:if (obj instanceof String s) {

//这里可以使用 s 变量

} else {

//这里不能使用 s 变量

}引入 Record,类似于枚举类型,具有 Lombok 功能,可以自动生成构造器、equals、getter 等方法。放弃 CMS

Java 15

引入 hidden classString.substring 优化,如果长度为 0,返回 null引入 Sealed class

Java 16

Stream新增toList方法提供jpackagejava.time 根据时段获取时间

Java 17

升级 switch 使用,switch可直接用 instanceof 模式匹配选择,不过需要提前做 null 判断(下面代码选自 oschina):Object o;

switch (o) {

case null -> System.out.println("首先判断对象是否为空,走空指针逻辑等后续逻辑");

case String s -> System.out.println("判断是否为字符串,s:" + s);

case record p -> System.out.println("判断是否为Record类型: " + p.toString());

case int[] arr -> System.out.println("判断是否为数组,展示int数组的长度" + ia.length);

case Integer i -> System.out.println("判断是否为Intger对象,i:" + i);

case Student s -> System.out.println("判断是否为具体学生对象,student:" + s.toString());

case UserCommonService -> System.out.println("判断是否为普通用户实现类,然后走普通用户逻辑");

case UserVipService -> System.out.println("判断是否为vip用户实现类,然后走vip用户逻辑");

default -> System.out.println("Something else");

}默认启用 Parallel GC增强TreeMap统一日志异步刷新,先将日志写入缓存,独立线程负责刷新到相应输出。

上面的香港云服务器版本只有 Java 11 和 Java 17 是 LTS(Long Term Support) 版本。

总结

全面拥抱 Java 17 还没有真的到来,但已经在路上了,作为程序员的我们应该做准备了。

最近更新
copyright © 2025 powered by 益强资讯全景  滇ICP备2023006006号-31sitemap