Java 11与Java 17:为何程序员仍坚守Java8?

发表时间: 2023-02-18 09:31



Java,相信大家已经不陌生了。在这里,我想和大家聊聊JDK版本。经过近30年的变迁,JDK也慢慢更新换代了。大家热衷的有JDK8、JDK11、JDK17。那么对你来说,你更喜欢哪个?

首先说说java11。2018年开始,java11正式发布,带来了ZGC、Http Client等重要特性,包括17个JEP(JDK Enhancement Proposals,JDK增强建议)。对于我们的业务来说,选择 11 将意味着一个长期、可靠和可预测的技术路线图。特别是免费的 OpenJDK11 肯定会得到 OpenJDK 社区的长期支持。

此外,JDK11引入了两种新型GC,尤其是ZGC。从能力上来说,这对JDK来说是一个巨大的突破,为特定生产环境的苛刻需求提供了一种可能的选择



在这里,我们也罗列了java11的几个新特性

  1. ZGC 是 JAVA 11 中最重要的特性,它是一个并发的、基于区域的、紧凑的垃圾收集器。只有根扫描阶段会STW,所以GC停顿时间不会随着堆的增长和存活对象的增长而变长)。优点:GC停顿时间不会超过10ms;它可以处理数百兆字节的小堆和几个 T 的大堆(OMG);与G1相比,应用吞吐量下降不超过15%;为以后的GC功能和colord pointers的使用以及Load barriers的优化打下基础。
  2. 字符串处理方法
  3. Optional 增强(Optional增加了几个很酷的方法,比如很容易将 Optional 转换成 Stream)
  4. 局部变量类型推断升级(jdk11之前无法实现给var加注解的语法格式)
  5. 新的HTTP 客户端 API
  6. 更简化的编译和运行程序
  7. 废除 Nashorn 引擎



上面简单介绍了JAVA11的相关情况,接下来介绍一下JAVA17,接下来我们来看看JAVA17的几个特点:

  1. record关键字(record用于创建不可变数据类。在此之前,如果需要创建一个存储数据的类,通常需要先创建一个Class,然后生成constructors、getters、setters、hashCode、equals和toString等等这些方法,或者使用Lombok来简化这些操作。)
  2. 密封类(Sealed classes 让我们更好地控制哪些类可以扩展我定义的类。密封类可能对框架或中间件开发人员更有用。在此之前,一个类要么是可扩展的,要么是最终的,只有这两个选项)
  3. instanceof 模式匹配,一般我们在使用instanceof 的时候,一般会出现在我们需要判断一个变量的类型的时候。如果它匹配指定的类型,则该类型被强制转换为一个新的变量。
  4. 日期循环格式化,Java 17 中新增了一种模式 B 用于格式化 DateTime,按照 Unicode 标准表示一天中的时间段
  5. 简化数字格式化支持,向 NumberFormat 添加工厂方法,可以根据 Unicode 标准以紧凑的、人类可读的形式格式化数字



对于JAVA17,我们简单列出优点,让大家看看对比。那么重点来了,为什么还有那么多工程师在用java8呢?
很多同事给出的理由如下:
(1)平台升级存在风险,风险需自行承担
(2)新版本的一些新功能对现有业务来说不是必须的
(3)重点是java8之后的新版本的特性要足够吸引大家更新


对于你来说,你更喜欢哪个版本?