Java 16 藏刀而来,Java 8 面不改色 | 它强任它强,我用 Java 8,嘿嘿(2)

简介: Java 16 藏刀而来,Java 8 面不改色 | 它强任它强,我用 Java 8,嘿嘿

----新特性----


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) { }

1

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


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 的时候,差点憋死,很多特性到最后都不了了之了。


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


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


相关文章
|
9月前
|
存储 SQL 算法
八个理由:从java8升级到Java17
八个理由:从java8升级到Java17
319 0
|
4月前
|
Java 编译器 API
从Java 8到Java 17,这些新特性让你的代码起飞!
【10月更文挑战第10天】在软件开发领域,Java作为一种历史悠久且广泛使用的编程语言,不断进化以适应新的需求和挑战。从Java 8到Java 17,每一次版本更新都带来了诸多新特性和改进,极大地提升了开发效率和代码质量。今天,我们就来一起探讨这些新特性,看看它们是如何让我们的代码“起飞”的。
297 0
|
6月前
|
存储 算法 Oracle
19 Java8概述(Java8概述+lambda表达式+函数式接口+方法引用+Stream+新时间API)
19 Java8概述(Java8概述+lambda表达式+函数式接口+方法引用+Stream+新时间API)
84 8
|
6月前
|
Java API
Java8 Lambda 设计和实现问题之在Java 8的Stream API中,parallel=false时collect方法是如何实现的
Java8 Lambda 设计和实现问题之在Java 8的Stream API中,parallel=false时collect方法是如何实现的
|
9月前
|
安全 Java API
Java 8中的Stream API:简介与实用指南深入理解Java并发编程:线程安全与锁优化
【5月更文挑战第29天】本文旨在介绍Java 8中引入的Stream API,这是一种用于处理集合的新方法。我们将探讨Stream API的基本概念,以及如何使用它来简化集合操作,提高代码的可读性和效率。 【5月更文挑战第29天】 在Java并发编程中,线程安全和性能优化是两个核心议题。本文将深入探讨如何通过不同的锁机制和同步策略来保证多线程环境下的数据一致性,同时避免常见的并发问题如死锁和竞态条件。文章还将介绍现代Java虚拟机(JVM)针对锁的优化技术,包括锁粗化、锁消除以及轻量级锁等概念,并指导开发者如何合理选择和使用这些技术以提升应用的性能。
|
8月前
|
存储 缓存 算法
ConcurrentHashMap的演进:从Java 8之前到Java 17的实现原理深度剖析
ConcurrentHashMap的演进:从Java 8之前到Java 17的实现原理深度剖析
|
8月前
|
IDE Java 程序员
Java8实战-为什么关心Java8
Java8实战-为什么关心Java8
30 0
|
9月前
|
安全 Java
【JAVA】Java8开始ConcurrentHashMap,为什么舍弃分段锁
【JAVA】Java8开始ConcurrentHashMap,为什么舍弃分段锁
|
9月前
|
Java 编译器 API
Java基础教程(17)-Java8中的lambda表达式和Stream、Optional
【4月更文挑战第17天】Lambda表达式是Java 8引入的函数式编程特性,允许函数作为参数或返回值。它有简洁的语法:`(parameters) -> expression 或 (parameters) ->{ statements; }`。FunctionalInterface注解用于标记单方法接口,可以用Lambda替换。
103 1
|
9月前
|
Java
java基础:java8新特性lambda表达式&::
java基础:java8新特性lambda表达式&::

热门文章

最新文章