Module jdk.jfr
Package jdk.jfr

Class Event

java.lang.Object
jdk.jfr.Event

public abstract class Event extends Object
事件的基类,用于派生子类以定义事件及其字段。

以下示例展示了如何实现一个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原始类型:booleancharbyteshortintlongfloatdouble。支持的引用类型包括:StringThreadClass。数组、枚举和其他引用类型会被静默忽略并不包括在内。可以使用transient修饰符来排除支持的类型的字段。即使是支持的类型,静态字段也不会被包括。

当使用注解时,工具可以以有意义的方式可视化数据(例如LabelDescriptionTimespan)。如果应用于Event类或其字段的注解存在(间接地、直接地或关联地),具有MetadataDefinition注解,并且不包含枚举、数组或类,则它们会被包括。

收集要存储在事件中的数据可能是昂贵的。可以使用shouldCommit()方法来验证当调用commit()方法时实际上是否会将事件实例写入系统。如果shouldCommit()返回false,则可以避免这些操作。

自 JDK 版本:
9
  • Constructor Summary

    Constructors
    Modifier
    Constructor
    Description
    protected
    Event()
    唯一的构造函数,供子类构造函数调用,通常是隐式的。
  • Method Summary

    Modifier and Type
    Method
    Description
    final void
    begin()
    开始计时此事件。
    final void
    commit()
    将字段值、时间戳和事件持续时间写入飞行记录器系统。
    final void
    end()
    结束此事件的计时。
    final boolean
    如果至少有一个记录正在运行,并且此事件的启用设置为true,则返回true,否则返回false。
    final void
    set(int index, Object value)
    设置字段值。
    final boolean
    如果此事件的启用设置为true,并且持续时间在事件的阈值内,则返回true,否则返回false。

    Methods declared in class java.lang.Object

    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
  • 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

      public final void set(int index, Object value)
      设置字段值。

      仅当使用EventFactory类动态定义事件时适用。

      提供的index对应于传递给EventFactory类的工厂方法的ValueDescriptor对象的索引。

      参数:
      index - 传递给EventFactory.create(java.util.List, java.util.List)的字段的索引
      value - 要设置的值,可以为null
      抛出:
      UnsupportedOperationException - 如果不是动态生成的事件
      IndexOutOfBoundsException - 如果index小于0或大于等于为事件指定的字段数
      参见: