大家好,我是君哥。

新版任你发,我用 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

  • 私有接口方法

  • 默认垃圾收集器改为 G1

  • HTTP 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 关键字用于返回结果。

  • ZGC 支持将未使用的内存归还操作系统

  • 引入了文本块,可以使用 """ 三个引号表示文本块,示例代码如下:

String html = """<html><body><p>Hello, world</p></body></html>
""";

Java 14

  • instanceof 语法简化,可以直接给对象赋值:

if (obj instanceof String s) { //这里可以使用 s 变量
} else {//这里不能使用 s 变量
}
  • 引入 Record,类似于枚举类型,具有 Lombok 功能,可以自动生成构造器、equals、getter 等方法。

  • 放弃 CMS

Java 15

  • 引入 hidden class

  • String.substring 优化,如果长度为 0,返回 null

  • 引入 Sealed class

Java 16

  • Stream新增toList方法

  • 提供jpackage

  • java.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 还没有真的到来,但已经在路上了,作为程序员的我们应该做准备了。

继 SpringBoot 3.0,Elasticsearch8.0 官宣:拥抱 Java 17相关推荐

  1. 继小米之后,360 也官宣造车!互联网企业造车到底哪家强?

    整理 | 郑丽媛 出品 | CSDN(ID:CSDNnews) 还记得 3 月 30 日晚上,雷军一句"我愿押上人生全部声誉,为小米汽车而战!"激起了千层浪.彼时不少人都在感慨,5 ...

  2. keras 分布式_TensorFlow 2.0正式版官宣!深度集成Keras

      新智元报道   来源:medium.GitHub 编辑:小芹.大明 [新智元导读]TensorFlow 2.0正式版终于发布了!深度集成Keras,更简单.更易用,GPU训练性能提升.这是一个革命 ...

  3. 华为鸿蒙2.0智慧屏,官宣!华为车载智慧屏将于10月30日发布,或搭载鸿蒙OS 2.0...

    10月27日,华为官方宣布,华为车载智慧屏将于10月30日发布,国行华为 Mate40 系列新品也将一同亮相. 据悉,华为车载智慧屏或搭载华为鸿蒙OS 2.0系统,聚合了华为智能手机的大部分适合汽车移 ...

  4. java semaphore(0)_面试官:说说Java中的信号量?Semaphore

    Semaphore (信号量)是由计算机科学家Dijkstra在1965年提出的,广泛应用不同的操作系统,在管程提出之前信号量就是并发编程领域的霸主!几乎所有并发的语言都支持信号量机制. Semaph ...

  5. GitHub重磅官宣!Java开发环境搭建超全详解

    =>下载虚拟机 由于本次演示是基于windows的,因此下载windows版本的虚拟机 =>安装 下载好的虚拟机安装包如下,双击进行安装. 注意:一般在安装新软件时,尽量把杀毒软件关闭. ...

  6. realmeq2鸿蒙系统,realme UI 2.0官宣:十月随新机一起发布!

    在今日,OPPO开发者大会正式召开,在大会上OPPO的最新系统ColorOS11也正式亮相,与此同时,作为OPPO的子品牌的Realme的最新系统realme UI 2.0也正式官宣,并称会与Real ...

  7. 魅族15系统是android,Powered by Android 10:魅族17系列官宣预装Flyme 8.1系统

    新酷产品第一时间免费试玩,还有众多优质达人分享独到生活经验,快来新浪众测,体验各领域最前沿.最有趣.最好玩的产品吧~!下载客户端还能获得专享福利哦! 原标题:Powered by Android 10 ...

  8. 官宣! 国际著名投资家吉姆·罗杰斯确认出席钛媒体2021 T-EDGE

     关注ITValue,看企业级最新鲜.最价值报道! ▎更多重磅嘉宾持续揭晓中! 又一重磅嘉宾!继Google母公司董事会主席John Hennessy官宣之后,国际著名投资家.量子基金创始人吉姆·罗杰 ...

  9. Java 17.0.2 LTS 生产环境免费使用版本下载地址

    Java 17 LTS 是 Java SE 平台的最新长期支持版本.根据Oracle 免费条款和条件许可,JDK 17 二进制文件可在生产环境中免费使用,并可免费重新分发.自Java 8u202版本后 ...

最新文章

  1. 用python编写脚本实现备份文件
  2. 洛谷 P3455BZOJ1101 【[POI2007]ZAP-Queries】
  3. 渴望尽快能找到工作,开始上班
  4. 【Python】Python字典的高级用法-统计计数
  5. js中split字符串分割示例
  6. python 目录 文件名_python目录与文件名操作
  7. java对比swith和if的不同,浅谈选择结构if语句和switch语句的区别
  8. ~~约数个数(附模板题)
  9. 开幕倒计时3天 | 2019中国大数据技术大会(BDTC)邀您一同共赴大数据+AI盛宴!...
  10. 【Linux】Vi中的各种命令
  11. 5-01表达基本概念
  12. 中国车牌数据集以及车牌识别代码
  13. 为什么论文查重建议用word?
  14. 大理古城“八戒”“悟空”与游客互殴 警方已介入
  15. 重装系统显示“安装程序正在应用系统设置“静止不动
  16. 第二篇:关键点检测的两类方法及区别(短文)
  17. matlab的独立样本t检验,独立双样本检验的Matlab实现
  18. 2018 icpc 焦作站 自闭记
  19. jQuery菜鸟教程02
  20. typora免费版,无需破解,安装直接使用

热门文章

  1. jQuery插件ASP.NET应用之AjaxUpload
  2. 解决 同时安装 python3,python2环境时,用pip安装 python3 包
  3. 复习一下日志等级类型
  4. 常见的php笔试题(附答案)搜集整理
  5. C#将unix时间戳转换成.net的DateTime类型的代码
  6. iOS AVPlayer 简单应用
  7. OPCServer Modbus使用和配置
  8. LINUX BASH SHELL,小小学习一下
  9. C语言控制流对应的汇编语句
  10. 技术总监谈好的程序员如何写代码