JDK 17的特性
写在前头
2022 年 3 月 30 日,SpringFramework 出现安全漏洞
可以看这篇文章
简单的来说,就是这两种情况:
- JDK 版本号 9 及以上的
- 使用了Spring 框架或衍生框架
如果小伙伴们要将 JDK 17 的特性应用到生产环境,需要先考虑这个问题哟。
简单描述
Java 17 在 2021 年 9 月 14 日发布。 是目前最新的长期支持版本(LTS) 。
上一个LTS 是在 2018 年 9 月 发布的 Java 11 。
(按oracle发布的Java 路线图推算,下一个LTS 将于 2025 年 9 月发布 )
OpenJdk 17 的地址在这里
Java 17 的特性
通过OpenJdk 的网站我们可以看到,17 主要有 14 个特性:
306: Restore Always-Strict Floating-Point Semantics
356: Enhanced Pseudo-Random Number Generators
382: New macOS Rendering Pipeline
391: macOS/AArch64 Port
398: Deprecate the Applet API for Removal
403: Strongly Encapsulate JDK Internals
406: Pattern Matching for switch (Preview)
407: Remove RMI Activation
409: Sealed Classes
410: Remove the Experimental AOT and JIT Compiler
411: Deprecate the Security Manager for Removal
412: Foreign Function & Memory API (Incubator)
414: Vector API (Second Incubator)
415: Context-Specific Deserialization Filters
博主按照自己的评判标准做了一下排序:
406 switch
switch 可以进行同 instanceof 的类型转换功能了:
之前:
if(obj instanceof String) {
String str = (String)obj;
// other doing ...
}
现在:
switch(obj) {
case String str : // doing ..... ; break;
default: break;
}
JEP 409:密封类(Sealed Classes)
密封类在 Java 15 中提供。 在 Java 17 中正式提供。
相比于 Java 15之前要不然不能继承,要不然可以随意继续的机制来说,密封类可以由开发人员指定部分类才可继承。
更加灵活了呢。
356 随机数生成器增强
Enhanced Pseudo-Random Number Generators
RandomGenerator
为 PRNG 伪随机数提供了新实现。
提供了 PRNG 的对象流,更好的支持了基于流的编程。
415:指定上下文的反序列化过滤器
在Java的历史上,有很多攻击都是通过序列化的方式进行的。
禁用反序列化过滤器可以提高系统的安全性。
306 严格的浮点语义
Restore Always-Strict Floating-Point Semantics
strictfp
关键词已不需要。
有关浮点计算,Java SE 1.2 之后,出于对性能的考虑,浮点的计算并没有严格遵守FP-strict的限制,符合IEEE-754规范。
随着摩尔定律,计算机性能的提升,之前所考虑的问题已不存在。
403 JDK安全:移除 –illegal-access JVM 参数
403 –illegal-access
对于普通的Java开发都来说是不需要在意的地方。
出于安全性考虑,禁止了深度反射。
对于一些使用到此功能的Java程序,可能会无法启动。
382 / 391 mac平台支持增强
New macOS Rendering Pipeline macOS/AArch64 Port
众所周知,Java 的一大特性就是跨平台,Java 17 对于 Mac 平台做出了优化:
- 支持 MacOs AArch64 架构
- MacOs 使用新的渲染库
Security Manager
本身使用的就很少,将在未来的版本移除。
398 / 407 / 410 / 411: 弃用或移除一些用不到的
Deprecate the Applet API for Removal
Remove RMI Activation
Remove the Experimental AOT and JIT Compiler
Deprecate the Security Manager for Removal
2022 年了,正经Java开发者谁还用 Applet 啊 [吃瓜]
412 / 414 孵化特性
Foreign Function & Memory API (Incubator) Vector API (Second Incubator) 孵化特性还有很多的不确定,大家知道就好~