模块  jdk.jfr
软件包  jdk.jfr

Class FlightRecorder


  • public final class FlightRecorder
    extends Object
    用于访问,控制和管理Flight Recorder的类。

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

    从以下版本开始:
    9
    • 方法详细信息

      • getRecordings

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

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

        结果
        录音列表,而不是 null
      • takeSnapshot

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

        快照是STOPPPED状态下的合成记录。 如果没有可用数据,则返回大小为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​(<? extends Event> eventClass)
        注册一个事件类。

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

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

        public static void unregister​(<? extends Event> eventClass)
        取消注册事件类。

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

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

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

        public static void addPeriodicEvent​(<? 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)具有Flight Recorder功能,则返回true

        此方法可以快速检查Flight Recorder是否可以初始化,而无需实际执行初始化工作。 该值可能会在运行时更改,并且缓存它是不安全的。

        结果
        true ,如果有Flight Recorder, false
        另请参见:
        for callback when Flight Recorder is initialized