Java 16 虽然是 2021 年 3 月 16 号发布的最新正式版本,但 6 个月后也要停止更新了,虽然这个版本带来了很多漂亮的新特性,但生命周期有限,对 Java 8 的伤害性有限。

自从 JDK 1.0 发布以来,Java 已经发布了数次重大更新。2017 年 9 月,Java 平台的主架构师 Mark Reinhold 提议,要求将 Java 的更新周期从之前的每 2 年一次调整到每 6 个月一次。于是只有 Java 8 与 Java 11 为目前提供的长期支持(LTS)版本,其余的版本,比如说 Java 9、Java 10、Java 12、Java 13、Java 14、Java 15 均已停止更新。

他强任他强,我用 Java 8 !

有一点我想说的是,作为一名 Java 程序员,真的非常的幸运!2008 年开始学习 Java,到 2021 年,十多年过去了,Java 仍然生机勃勃,欣欣向荣。


推荐一份 GitHub 上标星 98.1k 的 Java 面试攻略 | 附 CSDN 资源的下载方式

Java 的强大主要得益于开发人员的不断创新,从而强有力地保证了它对技术格局的适应性,不至于被新的竞争者挑落马下。还有 Java 的向后兼容性和安全性保证了使用者对它的信任感,如果不能保证的话,使用者可能就不得不弃坑而逃了。

根据 IDC(一家公信力很高的从事市场研究和分析的公司)的最新报告,全球有超过 900 万名开发者在使用 Java,占全职开发者的 69%,比其他任何一门编程语言都要多。

下一个长期支持的版本 Java 17 预计将于 2021 年 9 月实现全面可用性,它当中蕴藏的新特性肯定会在 Java 16 中有所体现,所以我们还是有必要来提前感受下新版本的魅力——虽然 Java 8 的新特性都还没摸透, 嘿嘿。

在 Java 16 中,标记已解决的问题有 1897 个,大头由 Oracle 解决,剩余的 500 个由个人开发者和其他组织的开发者解决,其中榜上有名的国内组织有 Tencent 和 Alibaba 两家巨头。

Java 16 的增强建议有 17 条,可以在 OpenJDK 的官网上看得到。

其中有一些离我们开发者比较远,我就一笔带过;有一些我认为比较重要,就重点说明。来,开搞!

----新特性----

1)394:instanceof 模式匹配

instanceof 模式匹配,Java 14 和 Java 15 都作为预览功能引入了,这个新的特性现在转正了,Java 17 后就可以放心大胆地使用了。

以前这样用:

// 先判断类型
if (obj instanceof String) {// 然后转换String s = (String) obj;// 然后才能使用
}

现在可以这样用:

if (obj instanceof String s) {// 如果类型匹配 直接使用
}

可以直接在 if 条件判断类型的时候添加一个变量,就不需要再强转和声明新的变量了。是不是特别简洁?

2)395 Record 记录类

Record 记录类也是 Java 14 和 Java 15 作为预览功能引入的,提供了一种更紧凑的语法来声明类,作为不可变数据的透明载体,可以大大减少类中的一些模板代码。我在介绍 Java 14 的时候就希望这个特性能转正,结果 15 的时候没有转,直到 Java 16,终于转了。

以前这样写:

public final class Writer {private final String name;private final int age;public Writer(String name, int age) {this.name = name;this.age = age;}public int getAge() {return age;}public String getName() {return name;}
}

现在可以这样写:

public record Writer(String name, int age) { }

一行代码就搞定,可以来看一下反编译后的字节码:

public final class Writer extends java.lang.Record {private final java.lang.String name;private final int age;public Writer(java.lang.String name, int age) { /* compiled code */ }public java.lang.String toString() { /* compiled code */ }public final int hashCode() { /* compiled code */ }public final boolean equals(java.lang.Object o) { /* compiled code */ }public java.lang.String name() { /* compiled code */ }public int age() { /* compiled code */ }
}

也就是说,Java 帮我们自动继承了 Record 类,并提高了一些模板代码,比如说构造方法、toString()hashCode() 等等。

----JVM 改进----

3)376 ZGC

ZGC(Z Carbage Collectior)是 Java 中最新的一种垃圾收集器,随后我打算专门分享一篇文章来介绍它,比较陌生的小伙伴可以不用管。ZGC 的目标就是低延迟,保证最大停顿时间在几毫秒之间,不管堆有多大或者存活的对象有多少。

即使是在大型堆上,也可以在 GC 安全点内实现亚毫秒级的暂停,从而提高应用程序的效率和性能。

4)387 弹性元数据

新方案以较小的块来分配元空间内存,从而减少类加载器的开销和碎片。通过将未使用的元数据内存以更快的速度返回给操作系统来提高弹性,从而进一步提高应用程序的性能并降低内存的利用率。

----新工具和类----

5)380 Unix-Domain 套接字通道

Unix-Domain 套接字通道一直是大多数 Unix 平台的功能,这个版本就可以在 Windows 10 和 Windows Server 2019 中实现这个功能了。

6)392 打包工具

此版本为了给用户提供更自然的安装体验,可以将 Java 应用程序打包成不同的本地格式,比如说可以在 Windows 上安装的 msi 和 exe,macOS 上安装的 pkg 和 dmg,以及 Linux 上的 deb 和 rpm。

----安全性----

7)390 基于值的类提议

此提议会将包装器类(比如 java.lang.Integer)修改为基于值的(类似于 java.util.Optional)类。

8)396 默认情况下,对 JDK 内部进行强封装

此提议的目的是为了提高 JDK 的安全性和可维护性,鼓励开发人员从使用内部 API 迁移到使用标准的外部 API,以便开发人员和用户都可以更轻松地升级。

----孵化器和预览功能----

9)338 矢量 API

JDK 中增加了一个新的模块 vector,该 API 将使开发者可以轻松地用 Java 编写可移植的高性能矢量算法。

10)389 外部链接 API

该 API 提供了纯静态类型的、纯 Java 代码的形式对本地代码进行访问。

11)393 外部的内存访问 API

此 API 使 Java 程序可以安全有效地对各种外部存储器(例如本机存储器、PMEP、托管堆存储器等)进行操作。

12)397 密封类

该类可以限制指定的类或接口来继承或实现它。

----提高 OpenJDK 开发者的生产效率----

剩下这些提议对 Java 用户(使用 Java 编写代码或者应用程序的人员)不直接可见,只对 Java 开发者(进行 OpenJDK 开发的人员)可见。因此,对于作为普通用户的我们来说,简单了解下就行了。

13)347 启用 C++ 14 的语言特性

看过 OpenJDK 的小伙伴应该知道,Java 的虚拟机和编译器是用 C 和 C++ 两种语言实现的。所以启用 C++ 14 的语言特性应该会提高开发者的生产效率,之前用的 C++ 98/03语言标准。

14)357 OpenJDK 的源码仓库从 Mercurial 迁移至 Git

Git 目前已经成为代码版本管理领域的绝对统治者,Java 也是顺应潮流。

15)369 OpenJDK 的源码仓库托管到了 GitHub 上

OpenJDK 的 GitHub 地址:https://github.com/openjdk

16)386 将 JDK 移植到 AIpine Linux

17)388 将 JDK 移植到 Windows/AArch64

386 和 388 这俩没什么好说的,pass。


总结一波,Java 16 藏的刀的确没啥杀伤力,唯一两个对我们开发者有用的提议,394 和 395,Java 14 已经提出了,到了 Java 16,不过不是转正而已,对 Java 8 的王者地位几乎没有什么影响。

但我想表达是,正式 Java 的这种快速迭代的尿性,反而使它更灵活一点。不像早年间从 Java 6 到 Java 7 的时候,差点憋死,很多特性到最后都不了了之了。

软件的快速迭代已经成为主流模式,是骡子是马拉出来遛遛,不行就砍,行了就转正,哈哈~

听说一键三连的小伙伴运气都不会差,不管大厂还是小厂还是外企,统统成功上岸

推荐阅读:

计算机教育中缺失的一课

奉劝那些想把编程学好的学弟学妹们

Java 16 藏刀而来,Java 8 面不改色 | 它强任它强,我用 Java 8,嘿嘿相关推荐

  1. 紧随Java 16,Spring Framework 5.3.5 发布:涵盖JDK 16的支持!

    昨天小编刚给大家介绍过最新的Spring Boot 2.4.4.Spring Cloud 2020.0.2 发布内容,还没看过的小伙伴点这里:Spring Boot 2.4.4.Spring Clou ...

  2. 哪家中国公司为Java 16贡献最多?Java第一大厂居然不是第一的...

    3月16日,Java16正式发布,前几天小编刚给大家介绍过Java16的新特性,还没有了解的小伙伴点这里:Java 16 正式发布!你还学得动吗? 同时很多小伙伴说自己还在用着Java8,这其中原因, ...

  3. Java 16 正式发布!你还学得动吗?

    就在刚刚,Java 16正式发布. Java 16 正式发布 主要特性 Vector API(孵化) 提升了Java在CPU向量计算的性能,这是对大规模的张量计算的支持,提升了Java在AI领域的能力 ...

  4. 前瞻:在 Java 16 中会带来哪些新特性?

    点击上方蓝色"程序猿DD",选择"设为星标" 回复"资源"获取独家整理的学习资料! 随着JDK 15的发布,计划于明年3月发布的JDK 16 ...

  5. JDK/Java 16 可能带来什么新特性?

    JDK 15 已于今年 9 月 15 日发布,这是一个短期版本,只会受到 Oracle 6 个月的支持.JDK 16 将作为标准 Java 版本的参考实现在 2021 年 3 月 16 日发布.与 J ...

  6. Java 16 正式发布

    主要特性 Vector API(孵化) 提升了Java在CPU向量计算的性能,这是对大规模的张量计算的支持,提升了Java在AI领域的能力. 启用了新的C++特性 允许在JDK中C++源代码中使用 C ...

  7. tomcat7.0支持什么版本的jdk_JDK/Java 16 可能带来什么新特性?

    点击"蓝字"关注我们吧 JDK 15 已于今年 9 月 15 日发布,这是一个短期版本,只会受到 Oracle 6 个月的支持.JDK 16 将作为标准 Java 版本的参考实现在 ...

  8. java strlen,跟妹妹聊到 Java 16 新特征,真香!

    Java 16新特性 2021年3月16日,甲骨文正式发布了Java 16!想当年JDK1.6新出的场景和历历在目,一瞬间,版本已经变成了16,真正体会了一把什么叫做光阴似箭,沧海桑田.虽然目前大部分 ...

  9. 官方正式发布 Java 16

    文章目录 前言 特性 向量API(孵化) 启用c++ 14 语言特性 从Mercurial迁移到Git 迁移到GitHub ZGC 并发线程堆栈处理 Unix-Domain 套接字通道 Alpine ...

最新文章

  1. 基于deep learning的快速图像检索(Deep Learning of Binary Hash Codes for Fast Image Retrieval)
  2. bzoj4665小w的喜糖 dp+容斥
  3. SQuAD文本理解挑战赛十大模型解读
  4. java 正则表达式语法_Java 正则表达式基础语法
  5. 假设以带头结点的循环链表表示队列_关于反转链表,看这一篇就够了!
  6. linux yum自动挂载_Linux运维——升级系统相关漏洞
  7. Snipaste的安装及快捷键的设置
  8. NetworkManager
  9. 详细解读Python 递归函数!
  10. Practical Go: Real world advice for writing maintainable Go programs
  11. python datetime datetime
  12. 如何更换 Mac 登录画面的背景桌面?
  13. Windbg Configuration
  14. 用Python开始机器学习(2:决策树分类算法)
  15. 柯美smb扫描出现服务器连接错误_柯尼卡美能达smb扫描设置方法是什么
  16. mac双系统w ndows8,U盘如何安装MAC双系统
  17. (32位汇编 九)ADC/SBB/XCHG/MOVS/STOS/REP
  18. 吉林市一日游规格说明书
  19. matlab反激变换器仿真模型,基于MATLAB的反激变换器分析与设计-毕业设计.docx
  20. 硬件设备使用网线连接PC并访问外网

热门文章

  1. 关于.net介绍 /第一行C#代码 /什么是面向对象
  2. 求矩阵特征值和特征向量
  3. 黑白照片怎么变成彩色?分享一个转换小妙招
  4. 计算机毕设之超市积分管理系统
  5. linux 喂狗时间,看门狗喂狗时间及程序
  6. RD基本功——Vi基础与最常用指令
  7. 计算机数学英语考本的分数线,专接本考试数学英语的成绩没有过公共线还有没有被..._公共英语考试_帮考网...
  8. day001:数据结构和算法-时间频度和时间复杂度
  9. 多线程为什么会出现安全问题
  10. RabbitMQ之消息的自动应答、手动应答和消息持久化(Java开发)