介绍
欢迎深入了解 JDK 版本 17 到 21 中引入的强大增强功能和工具。Java Development Kit (JDK) 的演变继续为开发人员提供强大而高效的环境,用于构建和维护 Java 应用程序。从编译器中的新功能到垃圾回收的改进,这些更新显著增强了性能、安全性和可用性。javac
JDK 17+ 中增强的开发工具
JDK 17 及更高版本对 Java 开发人员日常使用的工具进行了几项重大更新。让我们详细探讨这些增强功能。
javac 编译器增强功能
编译器是 Java 开发的基石,在 JDK 17 之后有了实质性的改进。在 JDK 18 中,串行 lint 警告得到了增强,以确保可序列化类中存在正确声明的字段。此改进有助于保持兼容性并避免序列化问题。javac``serialVersionUID
示例:增强的串行 lint 警告
javaCopy codeimport java.io.Serializable;
public class MyClass implements Serializable {
private static final long serialVersionUID = 1L;
private void writeObject(java.io.ObjectOutputStream out) throws IOException {
// custom serialization logic
}
private void readObject(java.io.ObjectInputStream in) throws IOException, ClassNotFoundException {
// custom deserialization logic
}
}
此外,JDK 20 还针对涉及不同数据类型的复合赋值中的潜在有损转换引入了警告,帮助开发人员捕获并纠正代码中的细微错误。
示例:有损转换警告
javaCopy codepublic class TypeConversion {
public static void main(String[] args) {
long l = 10L;
double d = 2.5;
// Warning: potential lossy conversion
l += d;
}
}
javadoc 改进
文档是软件开发的关键部分,该工具已得到显著增强。在 JDK 18 中引入该标记简化了 API 文档中示例源代码的包含。此标记可以更好地控制缩进,并允许使用区域来更有效地显示目标代码示例。javadoc``{@snippet ...}
示例:使用 {@snippet} 标签
javaC code/**
* This method adds two numbers.
*
* {@snippet :
* public int add(int a, int b) {
* return a + b;
* }
* }
*/
public int add(int a, int b) {
return a + b;
}
此外,该选项允许在生成的文档中包含交互式脚本,从而增强其可用性和交互性。--add-script
用于交互式编码的 jshell
在 JDK 9 中引入,允许对 Java 代码进行快速实验。JDK 19 添加了突出显示已弃用元素的功能,帮助开发人员避免使用过时的功能。jshell
示例:使用 jshell
shellCopy codejshell> int x = 5;
x ==> 5
jshell> int y = 10;
y ==> 10
jshell> int sum = x + y;
sum ==> 15
用于轻量级 Web 开发的 jwebserver
JDK 18 引入了 ,这是一个最小的 HTTP 静态文件服务器,非常适合 Web 开发测试、应用程序测试和非正式文件共享。它的简单性和易于设置使其成为开发人员的宝贵工具。jwebserver
示例:启动 jwebserver
shellCopy code$ jwebserver
Serving HTTP on 0.0.0.0 port 8000 (http://0.0.0.0:8000/) ...
用于应用程序打包的 jpackage
jpackage`(从 JDK 14 开始提供)是一个命令行工具,用于为 Java 应用程序创建本机安装程序和软件包。JDK 19 进行了增强,可支持用户特定的启动参数,使其更加灵活和用户友好。`jpackage
示例:使用 jpackage 创建程序包
shellCopy code$ jpackage --input input-dir --name MyApp --main-jar myapp.jar --type dmg
jmod 用于模块化开发
该工具有助于创建封装已编译的 Java 类、资源和其他相关文件的模块文件。JDK 21 引入了一个选项 ,允许开发人员指定压缩级别并优化模块文件大小。jmod``--compress``jmod
示例:创建 JMOD 文件
shellCopy code$ jmod create --class-path classes --module-version 1.0 --compress zip-9 mymodule.jmod
安全增强功能
安全性在软件开发中至关重要,JDK 21 对其安全工具进行了几项重要更新。
keytool 增强功能
keytool`现在,在使用弱加密算法或禁用加密算法时向用户发出警告,从而帮助维护强大的安全实践。JDK 21 还更新了 and 命令,以针对基于密码的弱加密算法发出警告。`-genseckey``-importpass
示例:使用 keytool 生成密钥
shellCopy code$ keytool -genseckey -keyalg AES -keysize 256 -keystore mykeystore.jks -storepass changeit
jarsigner 改进
jarsigner已得到增强,可以更准确地检测签名 JAR 文件中使用禁用或弱算法并发出警告,从而确保应用程序保持安全并符合现代加密标准。
示例:使用 jarsigner 对 JAR 文件进行签名
shellCopy code$ jarsigner -keystore mykeystore.jks -signedjar signedMyApp.jar myApp.jar myalias
监控和性能工具
有效的监控和性能调优对于高性能应用程序至关重要。JDK 21 引入了对 JDK Flight Recorder (JFR) 和 JDK Mission Control (JMC) 的显著增强功能。
JDK 飞行记录器 (JFR)
JDK 21 引入了该命令,该命令直接在 shell 中显示聚合的事件数据。这允许开发人员分析应用程序性能,而无需转储录制文件或打开 JMC。jfr view
示例:使用 jfr view 命令
shellCopy code$ jfr start --name myRecording
$ jfr view --name myRecording
JDK 任务控制 (JMC)
JMC 已更新为支持 Apple M1 计算机,现在包括高级堆栈跟踪图形视图,例如 Flame、Heat map 和 Dependency 。这些可视化可帮助开发人员识别性能瓶颈并更有效地优化其代码。
示例:启动 JDK Mission Control
shellCopy code$ jmc
JVM 和垃圾回收改进
垃圾回收 (GC) 是 Java 应用程序性能的一个关键方面。JDK 21 对 JVM 及其垃圾回收器进行了多项改进。
第 Z 代垃圾回收器 (ZGC)
JDK 21 中最重要的更新之一是为 Z Garbage Collector (ZGC) 引入了分代模式。此增强功能通过将堆分为新代和老代来提高内存管理的效率。分代 ZGC 特别适用于具有高分配率和长寿命对象的应用程序。
示例:启用分代 ZGC
shellCopy code$ java -XX:+UseZGC -XX:+ZGenerational
G1 垃圾回收器更新
G1 垃圾回收器已收到多项更新,包括支持更大的区域大小和改进的吞吐量计算。这些更改增强了 G1 的性能,使其更适合内存占用较大的应用程序。
示例:使用更新的设置启用 G1GC
shellCopy code$ java -XX:+UseG1GC -XX:G1HeapRegionSize=512M
并行和串行垃圾回收器
虽然并行和串行垃圾回收器已经成熟并处于维护模式,但 JDK 21 为这些回收器引入了字符串重复数据删除功能,通过减少重复的字符串实例来提高内存效率。
示例:启用字符串重复数据删除
shellCopy code$ java -XX:+UseStringDeduplication

















暂无评论内容