java.lang.Object
jdk.jfr.FlightRecorder
用于访问、控制和管理飞行记录器的类。
此类提供创建、启动、停止和销毁记录所需的方法。
- 自从:
- 9
-
方法总结
修饰符和类型方法描述static voidaddListener(FlightRecorderListener changeListener) 添加记录器监听器并捕获AccessControlContext以在调用监听器时使用。static voidaddPeriodicEvent(Class<? extends Event> eventClass, Runnable hook) 为周期性事件添加一个挂钩。返回包含所有当前注册事件的不可变列表。static FlightRecorder返回平台的飞行记录器。返回可用录音的不可变列表。static boolean如果 Java 虚拟机 (JVM) 具有飞行记录器功能,则返回true。static boolean如果 Flight Recorder 已初始化,则返回true。static void注册一个事件类。static booleanremoveListener(FlightRecorderListener changeListener) 删除记录器监听。static booleanremovePeriodicEvent(Runnable hook) 删除周期性事件的挂钩。创建所有可用记录数据的快照。static voidunregister(Class<? extends Event> eventClass) 注销事件类。
-
方法详情
-
getRecordings
返回可用录音的不可变列表。录制文件在创建后可用。当它处于
CLOSED状态时,它变得不可用,通常是在调用Recording.close()之后。- 返回:
-
录音列表,而不是
null
-
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
注册一个事件类。如果事件类已经注册,则忽略此方法的调用。
- 参数:
eventClass- 要注册的事件类,而不是null- 抛出:
IllegalArgumentException- 如果类是抽象类或不是Event的子类SecurityException- 如果存在安全管理器且调用者没有FlightRecorderPermission("registerEvent")
-
unregister
注销事件类。如果未注册事件类,则忽略此方法的调用。
- 参数:
eventClass- 要取消注册的事件类,而不是null- 抛出:
IllegalArgumentException- 如果类是抽象类或不是Event的子类SecurityException- 如果存在安全管理器且调用者没有FlightRecorderPermission("registerEvent")
-
getFlightRecorder
返回平台的飞行记录器。- 返回:
-
一个飞行记录器实例,而不是
null - 抛出:
IllegalStateException- 如果无法创建飞行记录器(例如,如果 Java 虚拟机 (JVM) 缺少飞行记录器支持,或者无法创建或访问文件存储库)SecurityException- 如果存在安全管理器且调用者没有FlightRecorderPermission("accessFlightRecorder")
-
addPeriodicEvent
public static void addPeriodicEvent(Class <? extends Event > eventClass, Runnable hook) throws SecurityException 为周期性事件添加一个挂钩。挂钩的执行应尽快返回,以避免阻塞其他 Flight Recorder 操作。钩子应该发出一个或多个指定类型的事件。添加挂钩后,调用调用的时间间隔可使用
"period"设置进行配置。- 参数:
eventClass- 钩子应该运行的类,而不是nullhook- 钩子,而不是null- 抛出:
IllegalArgumentException- 如果一个类不是Event的子类,是抽象的,或者已经添加了钩子IllegalStateException- 如果事件类具有Registered(false)注释且未手动注册SecurityException- 如果存在安全管理器且调用者没有FlightRecorderPermission("registerEvent")
-
removePeriodicEvent
删除周期性事件的挂钩。- 参数:
hook- 要删除的挂钩,而不是null- 返回:
true如果钩子被移除,false否则- 抛出:
SecurityException- 如果存在安全管理器且调用者没有FlightRecorderPermission("registerEvent")
-
getEventTypes
返回包含所有当前注册事件的不可变列表。默认情况下,事件在首次使用时注册,通常是在分配事件对象时。为确保事件尽早可见,可以通过调用
register(Class)方法来触发注册。- 返回:
-
事件列表,而不是
null
-
addListener
添加记录器监听器并捕获AccessControlContext以在调用监听器时使用。如果在添加监听器时已经初始化了 Flight Recorder,则在从此方法返回之前调用方法
FlightRecorderListener.recorderInitialized(FlightRecorder)方法。- 参数:
changeListener- 要添加的监听器,而不是null- 抛出:
SecurityException- 如果存在安全管理器且调用者没有FlightRecorderPermission("accessFlightRecorder")
-
removeListener
删除记录器监听。如果多次添加同一个监听,则只会删除一个实例。
- 参数:
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否则- 参见:
-