Java中JDK14的新特性之JFR,JMC和JFR事件流(推荐)

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技术站

(0)
上一篇 2023年5月19日
下一篇 2023年5月19日

相关文章

  • 如何通过JVM角度谈谈Java的clone操作

    那么让我们来详细讲解如何通过JVM角度谈谈Java的clone操作。 什么是Java的clone操作? Java的clone操作是用于复制Java对象的一种方式。在对一个Java对象进行clone操作时,会创建一个新的对象,新对象与原对象的内容相同,但是两个对象在内存中的地址是不同的。 clone操作的实现方式 Java的clone操作是通过实现Clonea…

    Java 2023年5月26日
    00
  • Java中args参数数组的用法说明

    Java中args参数数组的用法说明 在Java程序中,可以通过在程序入口方法main()中使用args参数数组来接受外部传入的参数。本文将详细讲解args参数数组的用法和示例说明。 用法说明 args参数数组是在程序启动时被创建的,其中包含了从命令行传递给程序的参数。如果在运行Java程序时没有传递参数,那么args数组将为空。 args参数数组的定义如下…

    Java 2023年5月26日
    00
  • 流式图表拒绝增删改查之kafka核心消费逻辑下篇

    首先我们需要了解一下本篇攻略讲解的是什么。 本文的主要内容是讲解如何将Kafka的核心消费逻辑结合流式图表进行可视化呈现,进而达到更好的监控和管理分布式系统的目的。 在具体讲解之前,我们需要明确几个概念: Kafka:一个高吞吐量、分布式的消息队列系统,主要用于解决大数据流的问题。 流式图表:一种可视化数据流的工具,可以通过图形化的方式展示数据流中的数据和流…

    Java 2023年5月20日
    00
  • SpringBoot响应处理实现流程详解

    下面我将详细讲解“SpringBoot响应处理实现流程详解”的完整攻略。 前言 Spring Boot 响应处理的实现流程是相对复杂的,但是熟练掌握后对于实现自己的响应处理或者了解框架背后的原理非常有帮助。 Spring Boot响应处理实现流程详解 Spring Boot 的请求响应处理流程大概如下: 用户请求到达 DispatcherServlet 后,…

    Java 2023年5月15日
    00
  • 什么是Java字节码增强?

    Java字节码增强是指在不改变Java源代码的情况下,通过修改字节码文件的方式来增强Java程序的功能。这种方式比直接修改源代码更加灵活,可以在运行时动态改变程序的行为。常见的Java字节码增强工具有:AspectJ、CGLib、Javassist等。 下面,我们来介绍一下如何使用字节码增强工具。 1. 安装字节码增强工具 首先,需要安装相应的字节码增强工具…

    Java 2023年5月11日
    00
  • java把字符串写入文件里的简单方法分享

    以下是详细讲解Java把字符串写入文件里的简单方法分享的完整攻略。 准备工作 为了实现将字符串写入文件,我们需要先准备文件路径和字符串内容,这里以一个示例字符串和文件路径为例: String content = "Java is a programming language."; String filePath = "D:/ja…

    Java 2023年5月19日
    00
  • Java详解IO流创建读取与写入操作

    Java详解IO流创建读取与写入操作 在Java中,IO流是常用的操作方式之一。它提供了操作文件、处理数据、网络编程等方便的工具。本文将详细讲解Java中IO流的使用,包括流的类型、如何创建文件、读取文件和写入文件等操作。 流的类型 在Java中,IO流通常分为两类:字节流和字符流。字节流是以字节为单位进行操作的,它通常用于操作二进制数据。而字符流是以字符为…

    Java 2023年5月26日
    00
  • Java中5种方式实现String反转

    当我们需要对字符串进行反转操作时,在Java中一共有五种方式可以实现这个需求,下面将进行详细讲解。 1. 使用StringBuffer或StringBuilder的reverse()方法 这是实现字符串反转最简单、直接的方式。因为StringBuffer和StringBuilder都是可变的,所以它们都提供了一个内置的reverse()方法用来反转字符串。 …

    Java 2023年5月27日
    00
合作推广
合作推广
分享本页
返回顶部