好家伙!JDK16 GA 终于发布,内置 Lombok 的功能,真的顶?

jdk64位-1.7和1.8安装包以及lombok.jar包 jdk64位-1.7和1.8安装包以及lombok.jar包下载地址,打开下载文档,永久免费下载!!! 立即下载

点击上方“芋道源码”,选择“设为星标”

管她前浪,还是后浪?

能浪的浪,才是好浪!

每天 8:55 更新文章,每天掉亿点点头发...

源码精品专栏

 

JDK 8

永

远

滴

神

!

皮一下,很开心

JDK16 的排期如下,就在昨天,JDK16 GA正式发布:

  • 2020/12/10  Rampdown Phase One (fork from main line)

  • 2021/01/14  Rampdown Phase Two

  • 2021/02/04  Initial Release Candidate

  • 2021/02/18  Final Release Candidate

  • 2021/03/16  General Availability

官方给出的JDK16所有特性一览如下,总计17个特性:

接下来,我们一一对其进行解读。

338: Vector API

Java提供了一些Vector API, 那到底什么是Vector API呢?废话不多说,给你举个例子。我们先写一段普通的Java代码:

void scalarComputation(float[] a, float[] b, float[] c) {
    for (int i = 0; i < a.length; i++) {
        c[i] = (a[i] * a[i] + b[i] * b[i]) * -1.0f;
    }
}

那么,用Vector API实现等价逻辑的代码如下所示。是不是更复杂了, CRY,嗯,没关系,反正要用到Vector API起码得是10年以后的事情了:

static final VectorSpecies<Float> SPECIES = FloatVector.SPECIES_256;

    void vectorComputation(float[] a, float[] b, float[] c) {

    for (int i = 0; i < a.length; i += SPECIES.length()) {
        var m = SPECIES.indexInRange(i, a.length);
        // FloatVector va, vb, vc;
        var va = FloatVector.fromArray(SPECIES, a, i, m);
        var vb = FloatVector.fromArray(SPECIES, b, i, m);
        var vc = va.mul(va).
        add(vb.mul(vb)).
        neg();
        vc.intoArray(c, i, m);
    }
}

347: Enable C++14 Language Features

一句话概括就是JDK16的C++源码可以使用C++14的语法特性。并且如果在HotSpot源码中确实有用到的话,会给出这些特性的特殊指导说明。

369: Migrate to GitHub

OpenJDK终于也迁移到GitHub中,这个和[JEP 357: Migrate from Mercurial to Git]一起完成的。之前OpenJDK的源代码都是用Mercuial维护的,没听说过?没听说过就对了,也不用浪费时间去了解。

OpenJDK还解释了为什么选择GitHub,主要有3个原因:

  1. 相比其他产品,GitHub的性能更好。

  2. GitHub是全球最大的源码托管服务,并且有超过5kw用户。

  3. GitHub拥有最多用于扩展的API。这些API支撑了很多文本编辑器(例如: Emacs, VS Code, Atom等), IDE工具(IDEA, Eclipse等), 命令行等对它的支持。

最后,附上GitHub中OpenJDK项目地址:https://github.com/openjdk/。

376: ZGC: Concurrent Thread-Stack Processing

这个需求的意思是ZGC把线程栈处理从safepoint挪到并发阶段,从而减少GC的停顿时间。ZGC的目标就是消灭GC停顿和扩展性问题。为此,ZGC做了很多的工作,在把Thread-Stack从safepoint挪到并发阶段之前,还有很多其他的GC操作也做了这些优化,比如:marking, relocation, reference processing, class unloading, 以及大多数的 root processing。

386: Alpine Linux Port

支持一些新的平台,比如Alpine Linux。Alpine Linux是一个Linux发行版, 它是一个由社区开发的Linux操作系统,该操作系统以安全为理念,面向x86路由器、防火墙、虚拟专用网、IP电话盒及服务器而设计。官方用3个词来介绍它:Small. Simple. Secure。确实很小,它的发行包不到6MB。

此外,JEP 388: Windows/AArch64 Port 也是类似的特性,即支持Windows平台和ARM64(AArch64)平台。

392: Packaging Tool

这个特性在JDK14中已经被介绍过(JEP 343),它的目的是创建一个打包工具jpackage,jpackage将Java应用程序打包到特定平台的程序包中,该程序包包含所有必需的依赖项。该应用程序可以作为普通JAR文件的集合或作为模块的集合提供。受支持的特定平台的软件包格式有:Linux: deb and rpm macOS: pkg and dmg Windows: msi and exe

打包命令参考如下:

$ jpackage --name myapp --input lib --main-jar main.jar
        # 如果MANIFEST.MF中没有Main-Class,也可以使用如下的打包命令
        $ jpackage --name myapp --input lib --main-jar main.jar \
        --main-class myapp.Main

393: Foreign-Memory Access API

引入API允许Java程序安全的、高效的访问堆外内存。这个需求的目标是希望做到如下几点:

  • Generality : 通用性,一个简单的API就可以操作很多外部内存,例如本地内存、托管的堆内存等。

  • Safety : 安全性, 这些API不会破坏JVM的安全,可以放心的使用。

  • Control : 可控性,客户端应具有关于如何显示或者隐式控制重新分配内存段的选项。

  • Usability : 可用性, 对那些需要访问堆外内的程序来说,比如使用Unsafe接口操作堆外内存,新设计的API应该是更好的替代者。

JDK16将这些API放到孵化的名为jdk.incubator.foreign的模块中,有3个主要的抽象: MemorySegment, MemoryAddress 和 MemoryLayout。

394: Pattern Matching for instanceof

这个特性最先出现在JDK14中(JEP 305), JDK15中(JEP 375)是第二轮预览。此次加到JDK16中是彻底完成这个特性。这个特性是为了增强Java语法,允许在instanceof中加入表达式匹配。以前我们写代码可能需要这样:

if (obj instanceof String) {
    String s = (String) obj;    // grr...
    ...
}

现在我们只需要这样:

if (obj instanceof String s) {
    // Let pattern matching do the work!
    ...
}

我们还可以这样:

if (obj instanceof String s && s.length() > 5) {
    flag = s.contains("jdk");
}

395: Records

很多人抱怨Java太冗余了,很多代码太形式主义了。比如如下这段代码所示,除了x和y的属性定义,其他的构造方法,equals、hashCode、toString方法基本上都借助IDE工具生成:

class Point {
    private final int x;
    private final int y;

    Point(int x, int y) {
        this.x = x;
        this.y = y;
    }

    int x() { return x; }
    int y() { return y; }

    public boolean equals(Object o) {
        if (!(o instanceof Point)) return false;
        Point other = (Point) o;
        return other.x == x && other.y == y;
    }

    public int hashCode() {
        return Objects.hash(x, y);
    }

    public String toString() {
        return String.format("Point[x=%d, y=%d]", x, y);
    }
}

因此Java发明了一种新的Java类,我们只需要简单的几行代码即可。有点类似于lombok给我们代码带来的简洁性:

record Point(int x, int y) { }

397: Sealed Classes

中文翻译的含义是密封类,具体是什么意思呢?举个栗子,如下这段代码所示,Expr这个接口用sealed进行了修饰,那么只有permits后面的实现类实现这个接口,不允许其他实现类:

package com.example.expression;

public sealed interface Expr
        permits ConstantExpr, PlusExpr, TimesExpr, NegExpr { ... }

public final class ConstantExpr implements Expr { ... }
public final class PlusExpr     implements Expr { ... }
public final class TimesExpr    implements Expr { ... }
public final class NegExpr      implements Expr { ... }

sealed不仅可以修饰interface,也可以修饰类class。JEP 397 的目的是限制接口的实现,以及限制类的继承。如此一来,类和接口的作者对其写的类和接口有更好的控制权。

sealed修饰的类有3大约束:

  1. sealed修饰的类和它permits的子类必属属于相同的module(JDK9中的模块化)。如果是没有命名的module,那么需要在相同的包名下。

  2. 每一个permits的子类必须直接实现sealed的类,而不能间接实现。

  3. 每一个permits的子类必须用一个修饰符描述它是如何传播从父类继承过来的密封性的。比如子类用final修饰,表示不允许其他类继承。再比如用sealed修饰,从而继续限制子类的子类。



欢迎加入我的知识星球,一起探讨架构,交流源码。加入方式,长按下方二维码噢:

已在知识星球更新源码解析如下:

最近更新《芋道 SpringBoot 2.X 入门》系列,已经 20 余篇,覆盖了 MyBatis、Redis、MongoDB、ES、分库分表、读写分离、SpringMVC、Webflux、权限、WebSocket、Dubbo、RabbitMQ、RocketMQ、Kafka、性能测试等等内容。

提供近 3W 行代码的 SpringBoot 示例,以及超 4W 行代码的电商微服务项目。

获取方式:点“在看”,关注公众号并回复 666 领取,更多内容陆续奉上。

文章有帮助的话,在看,转发吧。
谢谢支持哟 (*^__^*)
教程 | 基于遥感生态指数(RSEI)模型的生态环境质量评价 使用数据:Landsat8 OLI数据,行列号:122036,时间:20210527。 使用软件:ENVI5.3、ArcGIS10.2 二、4个指数计算 下述的四个指数的计算均是通过ENVI软件中的Band math工具进行计算。 (1)绿度指数 在常用的植被指数当中,归一化植被指数 ( NDVI) 能够有效地反映植被的生长情况与植被 覆盖度等重要植被的物理性质,检测灵敏度高,能 够较为真实地展现区域的地表空间变化规律,已经得到广泛利用,本文采用 NDVI 指数来代表绿度指数。 在ENV 阅读详情

相关推荐

U3d WebGL使用ToLua

首先我们在编辑器模式下加入Tolua插件,然后配置修改到在编辑器模式下能够正常的运行。 同个U3d 插件Build出WebGL的工程,运行的时候你会发现(有些需要把这个WebGL工程放在一个HttpServer下面,直接本地访问index.html会被拒绝,让你使用http的格式)。 当要加载完的时候会出现 To use dlopen, you need to use Emscripten'...

qq_35267906的博客 2948

JDK和Lombok版本兼容问题

@Getter @AllArgsConstructor public enum XXX { ADD("ADD"), UPDATE("UPDATE"), DELETE("DELETE"), ; private String operateType; } 错误:java: constructor LanguageOperateTypeEnum in enum com.timevale.open.service.enums.LanguageOperateT.

u011393781的博客 4448

电路板功能测试系统-FCT for PCBA

电路板功能测试系统用于电路板组件(PCBA)的功能测试(FCT),满足自动化大批量生产的要求。  ● 用户根据自己需要定义测试步骤,灵活方便  ● 适合工业自动化大批量生产应用  ● 系统测试精度高,稳定可靠   一、电路板功能测试系统概述 电路板测试过程通常由多个步骤组成,每单个步骤中需要对多个物理量(电压、电流、电阻、频率、波形等)进行测试。在每个步骤测试时

6813

推荐两款java开发实用工具 hutool 和 lombok

hutool工具 hutool官方网址 摘抄一段hutool工具的简介: Hutool是一个小而全的Java工具类库,通过静态方法封装,降低相关API的学习成本,是项目中“util”包友好的替代,它节省了开发人员对项目中公用类和公用工具方法的封装时间,使开发专注于业务。 安装使用: 首先在maven项目的pom.xml的dependencies中加入以下内容: <dependency> <groupId>cn.hutool</groupId> <ar

evelynnJava的博客 2195

拆解大疆M300电池BMS:基于TI TIDA-010030方案的硬件架构深度分析

本文深度解析了大疆M300无人机电池管理系统(BMS)基于TI TIDA-010030参考设计的硬件架构。通过对比TI方案与大疆实现的差异,详细介绍了BQ7694003监控前端和BQ34Z100电量计的优化设计,以及通信架构的可靠性改进。文章还揭示了大疆在成本、空间和标准化方面的工程妥协与创新平衡,为锂电池保护方案提供了实践参考。

weixin_27066963的博客 239

ComfyUI安装包运行前准备:增加虚拟内存

在Windows系统中,虚拟内存是一种重要的系统资源管理机制,它主要通过将硬盘空间用作内存来扩展系统的可用内存容量。以下是虚拟内存的主要作用: 1. 扩展物理内存容量 当物理内存(RAM)不足时,系统会将一部分数据从内存转移到硬盘上的虚拟内存区域(也称为“分页文件”或“交换文件”)。这样可以为正在运行的程序提供额外的“内存空间”,确保系统能够继续运行,而不会因为内存不足而崩溃。 2. 提高系统稳定性 虚拟内存为系统提供了一个缓冲区。如果没有虚拟内存...

聚梦小课堂 1万+

JavaSE(Lombok、枚举、JDK8新特性、正则表达式)

JavaSE阶段LombokLombok的使用lombok常用注解枚举 Lombok Lombok的使用 lombok介绍: lombok可以使用注解的方式让一些代码变的简洁 方便 实体类中有一些固定的代码:构造方法,getter/setter、equals、hashcode、toString方法都是固定的,写出来看着比较麻烦。而Lombok能通过注解的方式,在编译时自动为属性生成这些代码。 lombok使用: ​ 1. 添加lombok的jar包: 将lombok.jar(本例使用版本:1.18.10

weixin_50648720的博客 1103

mbedtls | 01 - 移植mbedtls库到STM32的两种方法

一、mbedtls 开源库 1. mbedtls是什么 Mbed TLS是一个开源、可移植、易于使用、代码可读性高的SSL库。可实现加密原语,X.509证书操作以及SSL / TLS和 DTLS 协议,它的代码占用空间小,非常适合用于嵌入式系统。 mbedtls遵循 Apache 2.0 开源许可协议,目前由 TrustedFirmware 维护(Linaro主持的一个治理开放社区项目),在Github上已收获 2.6k star,目前Github上发布的最新版本为 2.24.0 版本,开源仓库地址为:

Mculover666的博客(嵌入式) 1万+

JDK8飞到JDK17版本介绍和踩坑记录

SpringBoot3和Spring6的最低依赖就是JDK17! JDK17就是官方保证会长期支持的版本。 JDK 17 最多可以支持到 2029 年 9 月份。 JDK 8 支持的时间更长,可以延长到 2030 年 12 月 从 JDK 诞生到现在,还在长期支持的版本主要有 JDK 7、JDK 8 、JDK 11以及 JDK 1,JDK 17 将是继 Java 8 以来最重要的LTS版本,是 Java 社区八年努力的成果。

洛雪 8243

5.6华为OD机试真题 新系统 - 匹配命令行前缀关键字 (Java/Py/C/C++/Js/Go)

5.6华为OD机试真题 新系统 - 匹配命令行前缀关键字本文整理华为 OD 机试新系统机考真题库,涵盖高频考点精析与完整题目内容,提供 C 语言、Java、C++、Python、Go、JavaScript 多语言源码实现,搭配详细解题思路讲解,并支持在线 OJ 刷题练习,助力高效备考华为 OD 机试新系统。

算法大师! 2129

扩展卡尔曼滤波 (EKF, Extended Kalman Filter) 算法详解及案例分析

扩展卡尔曼滤波是一种用于估计非线性动态系统状态的递归算法。其目标是通过结合非线性系统模型和观测数据,估计系统的最优状态。

闲人编程的博客 2387

jdk8至jdk17新增特性

最终在 Java 14 中成为正式特性。JEP 394: Pattern Matching for switch(正式版):这个JEP将Java 12和13中预览的Pattern Matching for switch功能引入为正式功能,增强了switch语句的功能,使其更加简洁和可读。JEP 193: 变量句柄(Variable Handles):这个特性提供了一种更灵活、更高效的方式来访问对象的字段,类似于 java.util.concurrent.atomic 中的 Atomic 类,但更通用。

moqi6862的博客 2393

PyCharm安装PyQt5及工具详细教程

PyCharm是一款功能强大的Python集成开发环境(IDE),而PyQt5是一个用于创建GUI应用程序的流行Python库。在本教程中,我将指导您如何在PyCharm中安装PyQt5及其相关工具,并提供相应的源代码示例。安装完成后,启动PyCharm并创建一个新的项目。为了隔离项目的依赖项,我们建议在PyCharm中使用虚拟环境。在创建项目的过程中,您可以选择创建新的虚拟环境或使用现有的环境。根据您的操作系统,选择适当的版本并按照安装向导的指示进行安装。首先,您需要下载并安装PyCharm。

CfProgram的博客 589

JDK16 GA 正式版已发布了,内置 Lombok 功能,网友:功能虽赞,但学不动了~

推荐阅读: 这套Github上40K+star学习笔记,可以帮你搞定95%以上的Java面试 毫不夸张的说,这份SpringBoot学习指南能解决你遇到的98%的问题 给跪了!这套万人期待的 SQL 成神之路PDF,终于开源了 今天,有读者告诉小编JDK16正式版发布了,赶忙打开推特看看,我擦,确实发布了,这速度也太快了~ 之前看过一篇文章,博主Simon Ritter从Oracle...

xingduan5153的博客 337

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

JDK17 来了!不好意思,我还在用JDK8!

往期热门文章: 1、字节员工要哭了,薪资普调-17%! 2、秒杀场景的九个细节,细思极恐! 3、放弃MyBatis!我选择 JDBCTemplate! 4、生成订单30分钟未支付,则自动...

Java后端技术 1万+

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

Java14发布!Switch竟如此简单?Lombok也不需要了?来用Idea搭建Java14吧!​

Java 14 在 2020.3.17 日发布正式版了,但现在很多公司还在使用 Java 7 或 Java 8,每当看到 Java 又发布新版本心里就慌得一匹。不过此版本并不是 LTS ...

磊哥聊Java 516

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

Java14来了!Switch竟如此简单?Lombok也不需要了?来用Idea搭建Java14吧!

Java 14 在 2020.3.17 日发布正式版了,但现在很多公司还在使用 Java 7 或 Java 8,每当看到 Java 又发布新版本心里就慌得一匹。不过此版本并不是 LTS (长期支持版) 版本,所以不要慌,我们先来了解一下好了,等 LTS 版本发布后再用也不迟。 版本说明 现在 Java 的发布节奏是每年发布两个 GA (General Availability,正式发布版),每 6...

磊哥聊Java 4314

Java 14 发布!不使用"class"也能定义类了?还顺手要干掉Lombok!

2020 年 3 月 17 日,JDK/Java 14 正式 GA(General Available)。JDK14特性一览:JEP 305: Patt...

AI天才研究院 1万+

JDK 17:从语法糖到生产契约的Java运行时重构

Java虚拟机(JVM)作为企业级应用的核心运行时,其版本演进已从语言特性驱动转向稳定性、可观测性与云原生适配三位一体的技术治理。ZGC垃圾收集器实现毫秒级停顿可控,Sealed Classes强化编译期类型安全,Pattern Matching则重塑类型判断范式——这些并非孤立新特性,而是构成现代Java服务SLA的技术基座。它们共同支撑高并发微服务的低延迟诉求、模块化隔离的运维边界,以及AOT编译与容器镜像优化的工程实践。本文深入解析JDK 17如何以13个JEP为支点,推动Java从开发友好走向生产就

circularr9834的博客 521

javaweb环境配置及spring boot、tomact

python获取文件夹,各种不同文件类型,文件数量 import os info = {} for fpathe, dirs, fs in os.walk(‘D:\潭州课堂’): for f in fs: fllename = os.path.join(fpathe,f) res = os.path.splitext(fllename) hz = res[1] info.setdefault(hz...

hkduan的博客 681

服务端如何防止重复支付

点击关注公众号,Java干货及时送达来源:cnblogs.com/cjsblog/p/14516909.html概述如图是一个简化的下单流程,首先是提交订单,然后是支付。支付的话,一般是走...

方志朋的博客 163

对比 MySQL 的 Binlog 日志处理工具

点击关注公众号,Java干货及时送达来源:blog.youkuaiyun.com/weixin_38071106/article/details/88547660CanalMaxwellDatabus...

方志朋的博客 133

15 年 → Maven 4:Java 构建工具迎来“彻底重构”!

道面试题和选择题,包含Java基础、并发、JVM、线程、MQ系列、Redis、Spring系列、Elasticsearch、Docker、K8s、Flink、Spark、架构设计、大厂真题等,在线随时刷题!Maven 3 时代需要额外的 Flatten Maven Plugin,Maven 4 中已成为。以来,Maven 对 Java 构建生态的整体支持方式,几乎没有发生过颠覆性的变化。不升级 POM 也能用 Maven 4,但升级后才能真正“吃到红利”。相比之下,Maven 本身却显得有些“老态”。

Java精选 76

Maven 基础、Settings、JAR包说明

Maven工程

Lyndon的专栏 806

Java 语言演进:从 Java 7 到 Java 21 那些重大的变革

Java 版本演进与核心特性摘要 Java 经历了显著的版本演进策略变革:从早期不定期发布(Java 5/6/7)到2017年采用每6个月固定版本周期,并引入LTS(长期支持)版本机制(如8/11/17/21)。版本演进主线从Java 7的语法糖优化、Java 8革命性的函数式编程(Lambda/Stream),到后续版本的模块化、模式匹配等特性,最终在Java 21实现虚拟线程等重大更新。 Java 7通过try-with-resources、多异常捕获等语法糖显著提升开发效率;Java 8则彻底革新编程

河阿里的博客 603

升级springboot3

坑爹的发版流水线,管天管地,springboot2过了维护期,就催着我们升级。有不少javax的import ,需要换包路径,变成了jakarta。redis配置变化了,多了一个层级。记录一下升级需要处理的事情。导致必须上jdk17。Swagger 升级。

dzl84394的专栏 921
上一篇: 干掉 fastjson,我们用 Jackson!
下一篇: 厉害了!把 HashMap 剖析的只剩渣了!
公众号-芋道源码
博客等级 码龄10年 1634粉丝 377原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值