java.lang.Object
jdk.jfr.FlightRecorder
用于访问、控制和管理飞行记录器的类。
该类提供了创建、启动、停止和销毁记录的方法。
- 自 JDK 版本:
- 9
-
Method Summary
Modifier and TypeMethodDescriptionstatic void
addListener
(FlightRecorderListener changeListener) 添加一个记录器监听器,并在调用监听器时捕获AccessControlContext
。static void
addPeriodicEvent
(Class<? extends Event> eventClass, Runnable hook) 添加一个周期性事件的挂钩。返回一个包含当前所有已注册事件的不可变列表。static FlightRecorder
返回平台的飞行记录器。返回可用记录的不可变列表。static boolean
如果 Java 虚拟机(JVM)具有飞行记录器功能,则返回true
。static boolean
如果飞行记录器已初始化,则返回true
。static void
注册一个事件类。static boolean
removeListener
(FlightRecorderListener changeListener) 移除一个记录器监听器。static boolean
removePeriodicEvent
(Runnable hook) 移除一个周期性事件的挂钩。创建所有可用记录数据的快照。static void
unregister
(Class<? extends Event> eventClass) 注销一个事件类。
-
Method Details
-
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 添加一个周期性事件的挂钩。挂钩的实现应尽快返回,以避免阻塞其他飞行记录器操作。挂钩应发出一个或多个指定类型的事件。添加挂钩时,可以使用
"period"
设置来配置调用的间隔。- 参数:
-
eventClass
- 挂钩应运行的类,不为null
-
hook
- 挂钩,不为null
- 抛出:
-
IllegalArgumentException
- 如果类不是Event
的子类、是抽象的或挂钩已添加 -
IllegalStateException
- 如果事件类具有Registered(false)
注解且未手动注册 -
SecurityException
- 如果存在安全管理器且调用方没有FlightRecorderPermission("registerEvent")
-
removePeriodicEvent
移除一个周期性事件的挂钩。- 参数:
-
hook
- 要移除的挂钩,不为null
- 返回值:
-
如果成功移除挂钩则返回
true
,否则返回false
- 抛出:
-
SecurityException
- 如果存在安全管理器且调用方没有FlightRecorderPermission("registerEvent")
-
getEventTypes
返回一个包含当前所有已注册事件的不可变列表。默认情况下,事件在首次使用时注册,通常在分配事件对象时。要确保尽早可见事件,可以通过调用
register(Class)
方法来触发注册。- 返回值:
-
事件列表,不为
null
-
addListener
添加一个记录器监听器并捕获AccessControlContext
以在调用监听器时使用。如果在添加监听器时飞行记录器已初始化,则在从此方法返回之前会调用
FlightRecorderListener.recorderInitialized(FlightRecorder)
方法。- 参数:
-
changeListener
- 要添加的监听器,不为null
- 抛出:
-
SecurityException
- 如果存在安全管理器且调用方没有FlightRecorderPermission("accessFlightRecorder")
-
removeListener
移除一个记录器监听器。如果多次添加相同的监听器,则只会移除一个实例。
- 参数:
-
changeListener
- 要移除的监听器,不为null
- 返回值:
-
如果成功移除监听器则返回
true
,否则返回false
- 抛出:
-
SecurityException
- 如果存在安全管理器且调用方没有FlightRecorderPermission("accessFlightRecorder")
-
isAvailable
public static boolean isAvailable()如果 Java 虚拟机(JVM)具有飞行记录器功能,则返回true
。此方法可以快速检查飞行记录器是否可以初始化,而无需实际执行初始化工作。该值可能在运行时更改,不建议缓存它。
- 返回值:
-
如果飞行记录器可用则返回
true
,否则返回false
- 参见:
-
isInitialized
public static boolean isInitialized()如果飞行记录器已初始化,则返回true
。- 返回值:
-
如果飞行记录器已初始化则返回
true
,否则返回false
- 参见:
-