Java中JDK14的新特性之JFR,JMC和JFR事件流(推荐)
JDK14 中引入了 Java Flight Recorder(JFR)和 Java Mission Control(JMC),它们是开发 Java 应用程序时可以使用的工具。JFR可以有效地收集运行时数据,而 JMC 使得分析和解决性能问题变得更加便捷。在这篇文章中,我们将探讨 JDK14 中引入的这些新特性,并介绍如何使用其各自的功能。
Java Flight Recorder
Java Flight Recorder(JFR)是一种强大的工具,用于收集运行时数据。它可以持续记录应用程序的运行情况,包括线程状态、锁定信息、垃圾回收状态等,以及所有的方法调用信息。这样,开发人员就可以在程序运行时获取完整、准确的运行数据,从而更加方便地解决问题。
配置JFR
在 JDK14 中,启用 JFR 时,需要运行以下命令:
java -XX:+UnlockCommercialFeatures -XX:+FlightRecorder -XX:+UnlockDiagnosticVMOptions -XX:+DebugNonSafepoints -XX:FlightRecorderOptions=defaultrecording=true,disk=true,settings=path-to-settings-file.jfc
其中,-XX:+UnlockCommercialFeatures
选项启用了商业特性,而 -XX:+FlightRecorder
选项启用了 JFR。-XX:+DebugNonSafepoints
选项启用了在非安全点处中断的调试,这是 JFR 数据记录的必要条件。-XX:FlightRecorderOptions
选项用于配置 JFR 选项,defaultrecording=true
表示默认情况下打开录制器,disk=true
表示将数据写入磁盘,settings=path-to-settings-file.jfc
表示指定了 JFR 配置文件的路径。
使用JFR
在启用 JFR 后,接下来就可以使用 JFR 工具了。可以选择使用命令行工具或者 Mission Control 中的图形化工具。
命令行工具
使用以下命令可以创建一个名为 myrecording.jfr
的录制文件:
jcmd <pid> JFR.start name=myrecording
其中,<pid>
是应用程序的进程 ID。
使用以下命令可以停止该录制:
jcmd <pid> JFR.stop name=myrecording
使用以下命令可以将录制文件转换为更可读的格式:
jfr print myrecording.jfr
Mission Control(JMC)
Mission Control(JMC)是一个强大的分析工具,用于收集、分析 JFR 数据。使用 Mission Control 可以更加方便地分析录制文件。
在 Mission Control 的控制台中,可以打开 JFR 浏览器,从而获取完整、准确的 JFR 数据。
Java Mission Control
Java Mission Control(JMC)是一个图形化分析工具,用于查看、分析和优化 Java 应用程序的性能。JMC 提供了很多工具和功能,使得分析和解决性能问题更加简单、直观。
启动JMC
在 JDK14 中,要启动 JMC,只需要运行以下命令:
jmc
JMC 命令将自动启动,并打开 Mission Control UI。如果你在屏幕上看到了 Mission Control 的图标,并且可以正常打开它,就表示启动成功了。
使用JMC
使用 JMC,将提供给你的分析工具和功能包括:内存测量、CPU 分析、热点分析、线程分析、I/O 分析和 GC 分析等。
以下是使用 JMC 进行 CPU 分析的示例。
首先,要启动 CPU 热点分析器。在 Mission Control UI 的左侧菜单中选择 "Profiling and Telemetry",然后单击 "Start Flight Recording",弹出 "Start Flight Recording" 窗口。在窗口中,为 CPU 热点分析器选择配置文件,单击 "Start Recording" 即可启动。
然后,要查看分析结果。在 Mission Control UI 的左侧菜单中选择 "Inspector",然后单击 "CPU Profiling",选择要查看的线程或方法,就可以查看到相应的统计信息了。
JFR事件流
JFR 事件流是 JFR 数据的基本单位。它是一组相关的事件的组合,表示某些特定时间段内的应用程序运行情况。JFR 事件流可以用于分析和解决性能问题,还可以用于验证代码的正确性。
在 JDK14 中,我们可以使用 JFR 事件流 API 访问 JFR 数据,包括收集、处理和分析事件流。JFR 事件流有两种类型:实时事件流和延迟事件流。
以下是使用 JFR 事件流 API 访问 JFR 数据的示例。
import java.nio.file.Files;
import java.nio.file.Paths;
import jdk.jfr.consumer.RecordedEvent;
import jdk.jfr.consumer.RecordingFile;
public class JfrEventStream {
public static void main(String[] args) throws Exception {
byte[] bytes = Files.readAllBytes(Paths.get("myrecording.jfr"));
try (RecordingFile recordingFile = new RecordingFile(bytes)) {
while (recordingFile.hasMoreEvents()) {
RecordedEvent event = recordingFile.readEvent();
// 处理事件
}
}
}
}
以上代码使用 JFR 事件流 API,将 JFR 数据读入字节数组中,通过 RecordingFile
类访问 JFR 数据,并可持续地迭代并处理事件。
总结
在 JDK14 中,Java Flight Recorder 和 Java Mission Control 的引入,使得分析和解决性能问题变得更加容易。同时,JFR 事件流 API 的引入,可以方便地访问和处理 JFR 数据。这些工具和功能一定能够大大提高 Java 开发人员的效率,缩短开发周期。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Java中JDK14的新特性之JFR,JMC和JFR事件流(推荐) - Python技术站