最强JDK15 安装与讲解,有点想升级,终于要废弃偏向锁了

JDK 15已经于2020年9月15日如期发布 。本文介绍JDK 15新特性 。
发布版本说明根据发布的规划,这次发布的 JDK 15 将是一个短期的过度版,只会被 Oracle 支持(维护)6 个月,直到明年 3 月的 JDK 16 发布此版本将停止维护 。而 Oracle 下一个长期支持版(LTS 版)会在明年的 9 月份发布(JAVA 17),LTS 版每 3 年发布一个,上一次长期支持版是 18 年 9 月发布的 JDK 11 。下图展示了各个版本的发布历史 。

最强JDK15 安装与讲解,有点想升级,终于要废弃偏向锁了

文章插图
 
安装包下载主要分为OpenJDK版本和Oracle版本,下载地址如下:
  • OpenJDK版本:https://jdk.java.net/15/
  • Oracle版本:http://www.oracle.com/technetwork/java/javase/downloads/index.html
上述版本,如果是个人学习用途,则差异不大 。但如果是用于商业用途,则需要仔细看好相关的授权 。Oracle JDK根据二进制代码许可协议获得许可,而OpenJDK根据GPL v2许可获得许可 。
安装、验证本例子以OpenJDK版本为例 。解压安装包openjdk-15_windows-x64_bin.zip到任意位置 。
设置系统环境变量“JAVA_HOME”,如下图所示 。
最强JDK15 安装与讲解,有点想升级,终于要废弃偏向锁了

文章插图
 
在用户变量“Path”中,增加“%JAVA_HOME%bin” 。
安装完成后,执行下面命令进行验证:
>java -versionopenjdk version "15" 2020-09-15OpenJDK Runtime Environment (build 15+36-1562)OpenJDK 64-Bit Server VM (build 15+36-1562, mixed mode, sharing)更多有关Java的基本知识,可以参阅《Java核心编程》这本书,描述的非常详细 。
JDK 15 新特性说明JDK 15 为用户提供了14项主要的增强/更改,包括一个孵化器模块,三个预览功能,两个不推荐使用的功能以及两个删除功能 。
1. EdDSA 数字签名算法新加入 Edwards-Curve 数字签名算法(EdDSA)实现加密签名 。在许多其它加密库(如 OpenSSL 和 BoringSSL)中得到支持 。与 JDK 中的现有签名方案相比,EdDSA 具有更高的安全性和性能 。这是一个新的功能 。
使用示例如下:
// example: generate a key pair and signKeyPairGenerator kpg = KeyPairGenerator.getInstance("Ed25519");KeyPair kp = kpg.generateKeyPair();// algorithm is pure Ed25519Signature sig = Signature.getInstance("Ed25519");sig.initSign(kp.getPrivate());sig.update(msg);byte[] s = sig.sign();// example: use KeyFactory to contruct a public keyKeyFactory kf = KeyFactory.getInstance("EdDSA");boolean xOdd = ...BigInteger y = ...NamedParameterSpec paramSpec = new NamedParameterSpec("Ed25519");EdECPublicKeySpec pubSpec = new EdECPublicKeySpec(paramSpec, new EdPoint(xOdd, y));PublicKey pubKey = kf.generatePublic(pubSpec);有关EdDSA 数字签名算法的详细内容见RFC 8032规范 。
2. 封闭类(预览特性)可以是封闭类和或者封闭接口,用来增强 Java 编程语言,防止其他类或接口扩展或实现它们 。
有了这个特性,意味着以后不是你想继承就继承,想实现就实现了,你得经过允许才行 。
示例如下:
public abstract sealed class Student    permits ZhangSan, LiSi, ZhaoLiu {    ...}类 Student 被 sealed 修饰,说明它是一个封闭类,并且只允许指定的 3 个子类继承 。
3. 隐藏类此功能可帮助需要在运行时生成类的框架 。框架生成类需要动态扩展其行为,但是又希望限制对这些类的访问 。隐藏类很有用,因为它们只能通过反射访问,而不能从普通字节码访问 。此外,隐藏类可以独立于其他类加载,这可以减少框架的内存占用 。这是一个新的功能 。
4. 移除了 Nashorn JavaScript 脚本引擎移除了 Nashorn JavaScript 脚本引擎、APIs,以及 jjs 工具 。这些早在 JDK 11 中就已经被标记为 deprecated 了,JDK 15 被移除就很正常了 。
Nashorn 是 JDK 1.8 引入的一个 JavaScript 脚本引擎,用来取代 Rhino 脚本引擎 。Nashorn 是 ECMAScript-262 5.1 的完整实现,增强了 Java 和 JavaScript 的兼容性,并且大大提升了性能 。
那么为什么要移除?
官方的解释是主要的:随着 ECMAScript 脚本语言的结构、API 的改变速度越来越快,维护 Nashorn 太有挑战性了,所以…… 。


推荐阅读