3.4. 定义和使用自定义事件 API
JDK Flight Recorder (JFR)是一个包含自定义事件 API 的事件记录器。自定义事件 API 存储在 jdk.jfr 模块中,是一种软件接口,使您的应用程序可以与 JFR 通信。
JFR API 包括可用于管理记录和为您的 Java 应用程序、JVM 或操作系统创建自定义事件的类。
在使用自定义事件 API 监控事件前,您必须为自定义事件类型定义名称和元数据。
您可以通过扩展 Event 类来定义 JFR 基础事件,如 Duration、Instant、Requestable 或 Time 事件。具体来说,您可以将字段(如持续时间值)添加到与应用程序有效负载属性定义的数据类型匹配的类中。定义 Event 类后,您可以创建事件对象。
此流程演示了如何将自定义事件类型与 JFR 和 JDK Mission Control (JMC)搭配使用,以分析简单示例程序的运行时性能。
流程
在自定义事件类型中,在
Event类中,使用@name注释来命名自定义事件。此名称显示在 JMC 图形用户界面(GUI)中。在
Event类中定义自定义事件类型名称的示例@Name(“SampleCustomEvent”) public class SampleCustomEvent extends Event {...}@Name(“SampleCustomEvent”) public class SampleCustomEvent extends Event {...}Copy to Clipboard Copied! Toggle word wrap Toggle overflow 定义
Event类及其属性的元数据,如 name、category 和 labels。标签显示客户端的事件类型,如 JMC。注意大型记录文件可能会导致性能问题,这可能会影响您与文件交互的方式。确保正确定义您需要的事件记录注解数量。定义不必要的注解可能会增加您的记录文件的大小。
为示例
事件类定义注解示例Copy to Clipboard Copied! Toggle word wrap Toggle overflow 在
事件类中定义上下文信息。此信息设置自定义事件类型的请求处理行为,以便您可以配置事件类型以收集特定的 JFR 数据。定义简单
主类和事件循环的示例Copy to Clipboard Copied! Toggle word wrap Toggle overflow 在前面的示例中,简单
主类注册事件,事件循环会填充事件字段,然后发出自定义事件。在您选择的应用程序中检查事件类型,如 JMC 或 JFR 工具。
图 3.2. 检查 JMC 中的事件类型示例
JFR 记录可以包括不同的事件类型。您可以检查应用程序中的每个事件类型。