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

yizhihongxing

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日

相关文章

  • Spring学习之Bean的装配多种方法

    Spring学习之Bean的装配多种方法 Spring中的Bean是应用程序的基本构建块之一,而Bean装配指的是将各个Bean组合在一起以创建一个完整的应用程序。在Spring中,有多种方法可以对Bean进行装配。 1. 自动装配 自动装配是Spring中最简单、最便利的装配方式之一。Spring会自动地为一些Bean属性寻找合适的值,并将它们注入到Bea…

    Java 2023年5月31日
    00
  • java 虚拟机深入了解

    Java虚拟机深入了解攻略 1. 了解Java虚拟机 Java虚拟机(JVM)是Java程序运行的平台,其中的虚拟机可以理解为是一个能够执行Java字节码的虚拟计算器。 2. 学习Java虚拟机体系结构 Java虚拟机的体系结构可以分为五个部分:类加载器、运行时数据区、执行引擎、本地接口和本地方法库。 2.1 类加载器(Class Loader) 类加载器是…

    Java 2023年5月24日
    00
  • Java使用递归解决算法问题的实例讲解

    下面我将详细讲解一下Java使用递归解决算法问题的实例讲解的完整攻略。 1. 什么是递归? 递归是指在程序设计中,不断地调用自身的函数或过程的方法。Java递归法是一种常用的算法,简单来讲,它就是在方法内部调用自己。 2. 递归的应用场景 递归的应用场景是对问题进行分解,使得问题的规模不断缩小,直到解决问题的规模足够小,可以直接得到解决。 递归的特点是时间复…

    Java 2023年5月19日
    00
  • 解决spring项目找不到Aspect依赖注解的问题

    当我们在Spring项目中使用AspectJ时,可能会遇到找不到Aspect依赖注解的问题。这是由于AspectJ依赖的jar文件没有正确添加到项目的classpath中所致。以下是解决该问题的完整攻略: 第一步:添加AspectJ的依赖 在项目的pom.xml中添加以下依赖: <dependency> <groupId>org.as…

    Java 2023年5月31日
    00
  • jsp倒计时简单实现方法

    关于 “jsp倒计时简单实现方法” ,我可以提供以下详细的攻略: 一、前置知识 在实现倒计时的过程中,需要了解基本的前端技术(如html、css、JavaScript)和后端技术(如jsp等),并且需要了解 Javascript 定时器的使用方法。 二、实现步骤 创建一个jsp页面,实现基本的页面布局(比如可以放置一个计时器 div 容器)。 在页面中加入J…

    Java 2023年6月15日
    00
  • Tomcat启动springboot项目war包报错:启动子级时出错的问题

    首先,当我们将 SpringBoot 项目打包成 war 文件并上传到 Tomcat,启动时可能会出现以下错误提示: org.springframework.context.ApplicationContextException: Unable to start web server; nested exception is org.springframew…

    Java 2023年5月20日
    00
  • 详细分析JAVA加解密算法

    详细分析JAVA加解密算法 在JAVA中,常用的加解密算法包括对称加密算法、非对称加密算法和HASH算法。在这里,我们将详细分析这些加解密算法的实现过程以及相关代码示例。 对称加密算法 对称加密算法使用同一个密钥进行加密和解密。其加密过程简单、高效,但密钥的共享是该算法的重要瓶颈。 在JAVA中,常用的对称加密算法包括DES、3DES、AES和Blowfis…

    Java 2023年5月19日
    00
  • JAVA中string数据类型转换详解

    JAVA中string数据类型转换详解 在Java中,我们经常需要对数据类型进行转换以满足特定的需求。其中,String类型的转换是非常常见的操作。 String类型转换为基本数据类型 在Java中,String类型可以通过方法调用将其转换为基本数据类型。以下是一些常见的String到基本数据类型转换方法: 1. parseInt()方法 该方法将Strin…

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