您的位置 首页 java

Java 8 开始退场

新版任你发,我用 java 8。

这可能是当下 Java 开发者所经常听到的一句话,这也从侧面反映出了 Java 8 的经典。

不过时代可能真的要抛弃 Java 8,拥抱新版本了。

Spring Boot 3.0

之前 Spring Boot 发布了 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 月,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 新版本的阶段还没有真的到来,但或许已经在路上了。

文章来源:智云一二三科技

文章标题:Java 8 开始退场

文章地址:https://www.zhihuclub.com/174686.shtml

关于作者: 智云科技

热门文章

网站地图