模块 jdk.jfr
 jdk.jfr

类 FlightRecorder

java.lang.Object
jdk.jfr.FlightRecorder

public final class FlightRecorder extends Object
用于访问、控制和管理飞行记录器的类。

此类提供创建、启动、停止和销毁记录所需的方法。

自从:
9
  • 方法详情

    • getRecordings

      public List <Recording > getRecordings()
      返回可用录音的不可变列表。

      录制文件在创建后可用。当它处于 CLOSED 状态时,它变得不可用,通常是在调用 Recording.close() 之后。

      返回:
      录音列表,而不是null
    • takeSnapshot

      public Recording  takeSnapshot()
      创建所有可用记录数据的快照。

      快照是 STOPPED 状态下的合成记录。如果没有数据可用,则返回大小为 0 的记录。

      快照为以后的操作(例如,更改间隔或减小数据大小的操作)提供对数据的稳定访问。

      以下示例显示如何创建快照并将数据子集写入文件。

      try (Recording snapshot = FlightRecorder.getFlightRecorder().takeSnapshot()) {
        if (snapshot.getSize() > 0) {
          snapshot.setMaxSize(100_000_000);
          snapshot.setMaxAge(Duration.ofMinutes(5));
          snapshot.dump(Paths.get("snapshot.jfr"));
        }
      }
       
      当不再需要访问数据时,调用者必须关闭录音。
      返回:
      所有可用记录数据的快照,而不是null
    • register

      public static void register(Class <? extends Event > eventClass)
      注册一个事件类。

      如果事件类已经注册,则忽略此方法的调用。

      参数:
      eventClass - 要注册的事件类,而不是 null
      抛出:
      IllegalArgumentException - 如果类是抽象类或不是 Event 的子类
      SecurityException - 如果存在安全管理器且调用者没有 FlightRecorderPermission("registerEvent")
    • unregister

      public static void unregister(Class <? extends Event > eventClass)
      注销事件类。

      如果未注册事件类,则忽略此方法的调用。

      参数:
      eventClass - 要取消注册的事件类,而不是 null
      抛出:
      IllegalArgumentException - 如果类是抽象类或不是 Event 的子类
      SecurityException - 如果存在安全管理器且调用者没有 FlightRecorderPermission("registerEvent")
    • getFlightRecorder

      public static FlightRecorder  getFlightRecorder() throws IllegalStateException , SecurityException
      返回平台的飞行记录器。
      返回:
      一个飞行记录器实例,而不是null
      抛出:
      IllegalStateException - 如果无法创建飞行记录器(例如,如果 Java 虚拟机 (JVM) 缺少飞行记录器支持,或者无法创建或访问文件存储库)
      SecurityException - 如果存在安全管理器且调用者没有 FlightRecorderPermission("accessFlightRecorder")
    • addPeriodicEvent

      public static void addPeriodicEvent(Class <? extends Event > eventClass, Runnable  hook) throws SecurityException
      为周期性事件添加一个挂钩。

      挂钩的执行应尽快返回,以避免阻塞其他 Flight Recorder 操作。钩子应该发出一个或多个指定类型的事件。添加挂钩后,调用调用的时间间隔可使用 "period" 设置进行配置。

      参数:
      eventClass - 钩子应该运行的类,而不是 null
      hook - 钩子,而不是 null
      抛出:
      IllegalArgumentException - 如果一个类不是 Event 的子类,是抽象的,或者已经添加了钩子
      IllegalStateException - 如果事件类具有 Registered(false) 注释且未手动注册
      SecurityException - 如果存在安全管理器且调用者没有 FlightRecorderPermission("registerEvent")
    • removePeriodicEvent

      public static boolean removePeriodicEvent(Runnable  hook) throws SecurityException
      删除周期性事件的挂钩。
      参数:
      hook - 要删除的挂钩,而不是 null
      返回:
      true 如果钩子被移除,false 否则
      抛出:
      SecurityException - 如果存在安全管理器且调用者没有 FlightRecorderPermission("registerEvent")
    • getEventTypes

      public List <EventType > getEventTypes()
      返回包含所有当前注册事件的不可变列表。

      默认情况下,事件在首次使用时注册,通常是在分配事件对象时。为确保事件尽早可见,可以通过调用 register(Class) 方法来触发注册。

      返回:
      事件列表,而不是null
    • addListener

      public static void addListener(FlightRecorderListener  changeListener)
      添加记录器监听器并捕获 AccessControlContext 以在调用监听器时使用。

      如果在添加监听器时已经初始化了 Flight Recorder,则在从此方法返回之前调用方法 FlightRecorderListener.recorderInitialized(FlightRecorder) 方法。

      参数:
      changeListener - 要添加的监听器,而不是 null
      抛出:
      SecurityException - 如果存在安全管理器且调用者没有 FlightRecorderPermission("accessFlightRecorder")
    • removeListener

      public static boolean removeListener(FlightRecorderListener  changeListener)
      删除记录器监听。

      如果多次添加同一个监听,则只会删除一个实例。

      参数:
      changeListener - 要删除的监听器,而不是 null
      返回:
      true ,如果可以删除监听器,false 否则
      抛出:
      SecurityException - 如果存在安全管理器且调用者没有 FlightRecorderPermission("accessFlightRecorder")
    • isAvailable

      public static boolean isAvailable()
      如果 Java 虚拟机 (JVM) 具有飞行记录器功能,则返回 true

      该方法可以快速查看Flight Recorder是否可以初始化,而无需真正进行初始化工作。该值可能会在运行时更改,缓存它是不安全的。

      返回:
      true,如果飞行记录器可用,false否则
      参见:
    • isInitialized

      public static boolean isInitialized()
      如果 Flight Recorder 已初始化,则返回 true
      返回:
      true,如果 Flight Recorder 已初始化,false 否则
      参见: