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日

相关文章

  • Java标识接口的使用方法

    Java标识接口是一种没有成员的接口,其存在的唯一目的是将接口实现类标识为一种特定的类型。本篇攻略将为您详细介绍Java标识接口的使用方法。 什么是Java标识接口? Java标识接口是一种特殊的接口,其定义了一个接口实现类属于一个特定类型的语义,而不是定义了一个接口实现类需要提供什么方法。因此,标识接口中不包含任何方法。 Java标识接口的作用 Java标…

    Java 2023年5月26日
    00
  • ajax详解_动力节点Java学院整理

    AJAX详解 什么是AJAX AJAX(Asynchronous JavaScript and XML)即异步 JavaScript 和 XML,是一种在Web页面中实现异步数据交互的通信技术。它的核心是 XMLHttpRequest 对象,它可以在不刷新页面的情况下发送和接收数据。 AJAX的优点 页面无需刷新,数据实时更新 能够异步加载数据,减少页面加载…

    Java 2023年5月26日
    00
  • MyBatis开发Dao层的两种方式实现(原始Dao层开发)

    下面就来详细讲解”MyBatis开发Dao层的两种方式实现(原始Dao层开发)”的完整攻略。 1. 简介 Dao层是指数据访问对象层,负责与数据存储交互,实现数据的增删改查等一系列数据操作。在MyBatis开发中,Dao层有两种实现方式:原始Dao层开发和Mapper接口方式开发。 本文将详细介绍原始Dao层开发的实现流程和具体代码实现。原始Dao层开发是最…

    Java 2023年5月19日
    00
  • java实现登录之后抓取数据

    下面是Java实现登录之后抓取数据的完整攻略: 一、概述 当我们需要抓取某个网站上的数据时,通常需要先登录该网站,这样才能访问该网站的受保护资源。本篇攻略将会讲解如何使用Java实现模拟登录,并抓取登录后的页面数据。 二、准备 为了实现模拟登录,我们需要用到Java的HttpClient和Jsoup库。HttpClient用于发送HTTP请求,而Jsoup用…

    Java 2023年5月19日
    00
  • 进制转换基础

    进制转换基础 1. 什么是进制? 进制是一种数学表示法,指定了一组用于表示数值的符号或数字。在日常计算中,我们通常使用的是十进制(或者说是“阿拉伯数字”),即使用0到9这10个数字进行计数。但是在计算机中,为了存储和处理数据方便,使用的是二进制,即使用0和1这两个数字进行计数。 2. 进制转换方法 2.1 十进制转其他进制 十进制转其他进制的方法是:把十进制…

    Java 2023年5月19日
    00
  • jsp和servlet中实现页面跳转的方式实例总结

    让我来为你详细讲解在JSP和Servlet中实现页面跳转的方式。 1. 前言 通常情况下,当用户访问我们的Web应用程序时,我们需要展示若干个页面给用户。这些页面之间需要相互跳转,让用户能够顺畅地操作网站。在JSP和Servlet中有多种方式实现页面跳转,接下来我将会对这些方式做出总结。 2. response.sendRedirect()方法 respon…

    Java 2023年6月15日
    00
  • Centos7安装配置tomcat9并设置自动启动的方法

    下面是 “Centos7安装配置tomcat9并设置自动启动的方法” 的完整攻略。 1. 安装Tomcat9 1.1 下载Tomcat9二进制包 到Tomcat的官网https://tomcat.apache.org/download-90.cgi下载对应版本的Tomcat二进制包。 例如,下载 Tomcat 9.0.46 的二进制包 $ curl -O h…

    Java 2023年5月19日
    00
  • Filter、Servlet、Listener的学习_动力节点Java学院整理

    Filter、Servlet、Listener的学习攻略 一、什么是Filter Filter又称过滤器,是Java Web中一种很重要的组件。Filter的主要作用是在 Servlet容器的请求与资源(例如 Servlet、JSP等)之间加一个拦截器,对请求进行预处理,也可以对响应做出后处理。 Filter是Servlet API中最实用的技术之一,它非常…

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