网易首页 > 网易号 > 正文 申请入驻

JDK的第三个LTS版本JDK17来了

0
分享至

简介

2021年9月JDK17发布了,JDK17是最新的一个LTS版本。所谓LTS版本就是可以得到至少八年产品支持的版本。从2014年的JDK8,到2018年的JDK11,再到2021年的JDK17。

同时Oracle也调整了LTS版本的发布年限,从之前的三年调整到现在的二年,也就是说下一个LTS版本将会是JDK21,哇喔!

那么如果不是LTS版本呢? 非LTS版本只会得到六个月的产品支持。所以大家还是使用LTS版本吧。

好了,让我们一起来看看JDK17中都有那些新特性吧。

JDK17中的新特性

总中的来说,JDK17提供了14个优化点或者是变动点。我们会一一进行讲解。

语言上的新特性

JDK17在语言上的新特性只有一个 JEP 409: Sealed Classes。

Sealed Classes是在JDK15中引入的概念,它表示某个类允许哪些类来继承它:

public sealed class SealExample permits Seal1, Seal2{

public non-sealed class Seal1 extends SealExample {
}

public final class Seal2 extends SealExample {
}

final表示Seal2不能再被继承了。non-sealed 表示可以允许任何类继承。

核心库的优化

JDK17对JAVA核心库的优化有4个。

  • 第一个是:JEP 306: Restore Always-Strict Floating-Point Semantics

这个是什么呢?简单点说,就是之前的硬件架构,在严格进行浮点语义进行计算的时候,会消耗大量资源。这在很久以前硬件水平都不高的时候,是难以容忍的。

所以在JDK1.2之后,对浮点语义进行了微调,对默认的严格浮点语义进行了修改。

但是现在已经是2021年了,硬件水平得到了飞速的发展,所以之前引入的修改已经是不必要了,在JDK17中被废弃了。

  • 第二个是:JEP 356: Enhanced Pseudo-Random Number Generator

JDK中有一个专门生成随机数的类java.util.Random,但是这个类生成的都是伪随机数。

JDK17对这个类进行了加强,提供了一个RandomGenerator接口,为所有的伪随机数提供统一的API。

RandomGenerators 提供了ints、longs、doubles、nextBoolean、nextInt、nextLong、nextDouble 和 nextFloat等方法,来生成对应的随机数。

RandomGenerator接口又包括4个子接口,分别是:

SplittableRandomGenerator:提供了 split 和 splits 的方法,允许用户从现有的 RandomGenerator 生成一个新的 RandomGenerator.

JumpableRandomGenerator:扩展了RandomGenerator的jump 和 jumps 的方法,允许用户跳过一定数目的随机数。

LeapableRandomGenerator :扩展了RandomGenerator的leap 和leaps 的方法,允许用户跳过大量数目的随机数。

ArbitrouslyJumpableRandomGenerator:扩展了LeapableRandomGenerator,允许用户指定跳过的随机数。

同时还对Random、ThreadLocalRandom 和 SplittableRandom等类进行了重构。

  • 第三个是JEP 382: New macOS Rendering Pipeline

这个是专门为Mac做的优化,使用了最新的Apple Metal API 来实现JAVA的2D渲染。

  • 第四个是JEP 415: Context-Specific Deserialization Filters

JDK中一个很危险的用法就是反序列化,因为你不知道反序列化的对象到底是不是一个危险的对象,为了解决这个问题,在Java 9 中引入了反序列化过滤器,从而在反序列化之前对数据流进行验证。

但是这种基于流的过滤器有几个限制,这种方法不能扩展,并且很难在代码发布后更新过滤器。它也不能对应用程序中第三方库执行的反序列化操作进行过滤。

为了解决这些问题,JEP 290 还引入了一个 JVM 范围的反序列化过滤器,可以通过 API、系统属性或安全属性进行设置。但是这种静态的过滤器,在具有多个执行上下文的复杂应用程序中,往往会不太适用,因为不同的上下文可能需要不同的过滤条件。

JDK17对JDK9的过滤方法进行了改进,可以在JVM范围配置特定于上下文的反序列化过滤器。

支持新的平台

  • JEP 391: macOS AArch 64 Port

Mac的M1芯片都发布好久了,没有理由JDK不支持,这个JEP就是让JDK17支持原生的Apple的新Arm 64架构。

预览特性

  • JEP 406: Pattern Matching for switch (Preview)

这个新特性允许在switch中使用模式匹配。

我们知道,在之前的预览功能中,已经有模式匹配了,不过模式匹配是用在instance of语句中,如下所示:

// Old code
if (o instanceof String) {
String s = (String)o;
... use s ...

// New code
if (o instanceof String s) {
... use s ...
}

但是如果instanceof太多的话,也会造成困扰:

static String formatter(Object o) {
String formatted = "unknown";
if (o instanceof Integer i) {
formatted = String.format("int %d", i);
} else if (o instanceof Long l) {
formatted = String.format("long %d", l);
} else if (o instanceof Double d) {
formatted = String.format("double %f", d);
} else if (o instanceof String s) {
formatted = String.format("String %s", s);
return formatted;

最好的办法是将上面的代码转换成为switch:

static String formatterPatternSwitch(Object o) {
return switch (o) {
case Integer i -> String.format("int %d", i);
case Long l -> String.format("long %d", l);
case Double d -> String.format("double %f", d);
case String s -> String.format("String %s", s);
default -> o.toString();

这就是switch中的模式匹配。

  • JEP 412: Foreign Function and Memory API (Incubator)

在JDK14和15中,JDK已经可以调用不属于JVM内部的代码和访问不归JVM管辖的内存空间。这个新特性在JDK17中得到了增强。

想象一下,以后JDK可以原生支持调用非java语言的API,是不是很厉害?

  • JEP 414: Vector API (Second Incubator)

Vector是在JDK16中引入的。可以让向量计算更加快速。循环遍历的计算,可以用Vector来进行简化。

其他改动

其他的一些改动比如封装JDK内部使用的API ,废弃了Security Manager,Applet API和RMI等等,这里就不一一介绍了。

总结

JDK17是一个LTS版本,也提供了很多优秀的新特性,还不赶紧用起来!

本文已收录于 http://www.flydean.com/27-jdk17-new-features/

特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。

Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.

相关推荐
热点推荐
1:0!射门2:5,欧冠决赛,阿森纳半场领先巴黎,冲击队史首冠

1:0!射门2:5,欧冠决赛,阿森纳半场领先巴黎,冲击队史首冠

小彭美识
2026-05-31 01:03:52
外网看傻眼!536万亩麦田告急,中国救援刷屏:粮食是命,不能丢

外网看傻眼!536万亩麦田告急,中国救援刷屏:粮食是命,不能丢

黑鹰观军事
2026-05-29 15:15:34
终于知道苹果直营店的员工每天都很有活力的原因了,网友:门槛高

终于知道苹果直营店的员工每天都很有活力的原因了,网友:门槛高

另子维爱读史
2026-05-23 08:00:45
热熔胶枪事件后续:陈老师生活照曝光,面相凶狠,网友直言害怕!

热熔胶枪事件后续:陈老师生活照曝光,面相凶狠,网友直言害怕!

谭谈社会
2026-05-30 20:42:53
艾司唑仑立大功!老人吃艾司唑仑,不止助眠,还有5大获益

艾司唑仑立大功!老人吃艾司唑仑,不止助眠,还有5大获益

健康之光
2026-05-19 16:58:40
欧冠决赛阿森纳对阵巴黎:无论谁夺冠,西班牙足球都是赢家

欧冠决赛阿森纳对阵巴黎:无论谁夺冠,西班牙足球都是赢家

星耀国际足坛
2026-05-30 21:41:14
德泽尔比点将:三人来自布莱顿,热刺今夏重建从后场开始

德泽尔比点将:三人来自布莱顿,热刺今夏重建从后场开始

坠入温柔晚风
2026-05-30 01:08:15
耿同学再爆料中南大学两名帽子人才论文涉嫌学术不端,校方工作人员回应

耿同学再爆料中南大学两名帽子人才论文涉嫌学术不端,校方工作人员回应

文忆天下
2026-05-28 20:22:13
病历和裸检视频被泄露!医生群聊晒30厘米黄金肛塞合照

病历和裸检视频被泄露!医生群聊晒30厘米黄金肛塞合照

北京郑律师
2026-05-28 12:03:28
荷兰海军没想到:解放军这次下手挺狠,直接启动了电磁压制!

荷兰海军没想到:解放军这次下手挺狠,直接启动了电磁压制!

潮鹿逐梦
2026-05-31 00:16:48
06年男子打工借宿同学家,被同学母亲一眼看中,意外改变了他一生

06年男子打工借宿同学家,被同学母亲一眼看中,意外改变了他一生

小月文史
2025-03-11 18:44:56
新款本田CR-V售价18.59万起,6月9日上市

新款本田CR-V售价18.59万起,6月9日上市

生活魔术专家
2026-05-30 20:00:54
2029年1月1日实施!摩托车新国标落地,专家:取消13年报废正当时

2029年1月1日实施!摩托车新国标落地,专家:取消13年报废正当时

电动车的那些事儿
2026-05-29 07:43:18
暴跌93%,国产葡萄酒崩盘了

暴跌93%,国产葡萄酒崩盘了

毒sir财经
2026-05-30 22:44:12
徐正源:本以为会多休整些时间;三连胜离不开大家的努力

徐正源:本以为会多休整些时间;三连胜离不开大家的努力

懂球帝
2026-05-30 18:44:23
北京多家野人先生门店上线全新蛋糕冰淇淋,网友:被价格吓晕!有门店已断货…

北京多家野人先生门店上线全新蛋糕冰淇淋,网友:被价格吓晕!有门店已断货…

北京商报
2026-05-28 14:51:19
FIFA将于10月考察新梅斯塔利亚球场,确定2030年世界杯举办场地

FIFA将于10月考察新梅斯塔利亚球场,确定2030年世界杯举办场地

懂球帝
2026-05-30 20:51:25
科技股下跌,会带崩整个A股吗?回顾一下2000年

科技股下跌,会带崩整个A股吗?回顾一下2000年

睿知睿见
2026-05-28 07:36:16
整个萨尔布吕肯笼罩在伤感中:樊振东和狂热的中国球迷都要离开了

整个萨尔布吕肯笼罩在伤感中:樊振东和狂热的中国球迷都要离开了

杨华评论
2026-05-30 02:39:28
在外面千万不要同情心泛滥 网友:卖剩的凉菜倒掉也不能随便送人

在外面千万不要同情心泛滥 网友:卖剩的凉菜倒掉也不能随便送人

夜深爱杂谈
2026-05-25 19:37:47
2026-05-31 01:44:49
flydean程序那些事
flydean程序那些事
最通俗的解读,最深刻的干货!
356文章数 438关注度
往期回顾 全部

科技要闻

车圈大佬发声:价格战远去,但竞争仍残酷

头条要闻

两名9岁女孩被困电梯近2小时 求救几十次物业无动于衷

头条要闻

两名9岁女孩被困电梯近2小时 求救几十次物业无动于衷

体育要闻

岁月不饶人!39岁德约鏖战近5小时拼到呕吐

娱乐要闻

张碧晨《歌手》 “活人微死” 自嘲

财经要闻

双汇管不住一头猪

汽车要闻

900V+3.2秒破百 领克10+&领克10上市16.99万元起

态度原创

房产
亲子
旅游
健康
军事航空

房产要闻

红动五月!全国抢入核心资产,广州盯紧凯旋新世界!

亲子要闻

我在军博唱歌歌

旅游要闻

伊利亮相2026“跟着品牌去旅行”对接交流活动 以工业文旅融合彰显中国品牌力量

尝试干细胞疗法如何避免踩坑?

军事要闻

美防长参加"香会" 就美中关系最新表态

无障碍浏览 进入关怀版