java.lang.Object
jdk.jfr.Event
事件的基类,用于派生子类以定义事件及其字段。
以下示例展示了如何实现一个Event
类。
public class Example {
@Label("Hello World")
@Description("Helps programmer getting started")
static class HelloWorld extends Event {
@Label("Message")
String message;
}
public static void main(String... args) {
HelloWorld event = new HelloWorld();
event.message = "hello, world!";
event.commit();
}
}
在分配事件并填充其字段成员后,可以使用commit()
方法将其写入飞行记录器系统。
默认情况下,事件是启用的。要禁用事件,请使用@Enabled(false)
注解Event
类。
支持的字段类型是Java原始类型:boolean
、char
、byte
、short
、int
、long
、float
和double
。支持的引用类型包括:String
、Thread
和Class
。数组、枚举和其他引用类型会被静默忽略并不包括在内。可以使用transient修饰符来排除支持的类型的字段。即使是支持的类型,静态字段也不会被包括。
当使用注解时,工具可以以有意义的方式可视化数据(例如Label
、Description
和Timespan
)。如果应用于Event
类或其字段的注解存在(间接地、直接地或关联地),具有MetadataDefinition
注解,并且不包含枚举、数组或类,则它们会被包括。
收集要存储在事件中的数据可能是昂贵的。可以使用shouldCommit()
方法来验证当调用commit()
方法时实际上是否会将事件实例写入系统。如果shouldCommit()
返回false,则可以避免这些操作。
- 自 JDK 版本:
- 9
-
Constructor Summary
-
Method Summary
-
Constructor Details
-
Event
protected Event()唯一的构造函数,供子类构造函数调用,通常是隐式的。
-
-
Method Details
-
begin
public final void begin()开始计时此事件。 -
end
public final void end()结束此事件的计时。必须在调用begin
方法后调用end
方法。 -
commit
public final void commit()将字段值、时间戳和事件持续时间写入飞行记录器系统。如果事件以调用
begin
方法开始,但没有以显式调用end
方法结束,则当调用commit
方法时事件结束。 -
isEnabled
public final boolean isEnabled()如果至少有一个记录正在运行,并且此事件的启用设置为true,则返回true,否则返回false。- 返回:
- 如果事件已启用,则返回true,否则返回false
-
shouldCommit
public final boolean shouldCommit()如果此事件的启用设置为true,并且持续时间在事件的阈值内,则返回true,否则返回false。阈值是所有运行记录的最小阈值。- 返回:
- 如果事件可以写入飞行记录器系统,则返回true,否则返回false
-
set
设置字段值。仅当使用
EventFactory
类动态定义事件时适用。提供的
index
对应于传递给EventFactory
类的工厂方法的ValueDescriptor
对象的索引。- 参数:
-
index
- 传递给EventFactory.create(java.util.List, java.util.List)
的字段的索引 -
value
- 要设置的值,可以为null
- 抛出:
-
UnsupportedOperationException
- 如果不是动态生成的事件 -
IndexOutOfBoundsException
- 如果index
小于0
或大于等于为事件指定的字段数 - 参见:
-