- java.lang.Object
-
- jdk.jfr.FlightRecorder
-
public final class FlightRecorder extends Object
用于访问,控制和管理Flight Recorder的类。此类提供创建,启动,停止和销毁录制所需的方法。
- 从以下版本开始:
- 9
-
-
方法摘要
所有方法 静态方法 实例方法 具体的方法 变量和类型 方法 描述 static voidaddListener(FlightRecorderListener changeListener)添加记录器侦听器并捕获在调用侦听器时使用的AccessControlContext。static voidaddPeriodicEvent(类<? extends Event> eventClass, Runnable hook)为周期性事件添加一个钩子。List<EventType>getEventTypes()返回包含所有当前已注册事件的不可变列表。static FlightRecordergetFlightRecorder()返回平台的Flight Recorder。List<Recording>getRecordings()返回可用录音的不可变列表。static booleanisAvailable()如果Java虚拟机(JVM)具有Flight Recorder功能,则返回true。static booleanisInitialized()如果初始化Flight Recorder,则返回true。static voidregister(类<? extends Event> eventClass)注册一个事件类。static booleanremoveListener(FlightRecorderListener changeListener)删除录音机监听器。static booleanremovePeriodicEvent(Runnable hook)删除定期事件的挂钩。RecordingtakeSnapshot()创建所有可用记录数据的快照。static voidunregister(类<? extends Event> eventClass)取消注册事件类。
-
-
-
方法详细信息
-
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
-
isInitialized
public static boolean isInitialized()
如果初始化Flight Recorder,则返回true。- 结果
-
true,如果Flight Recorder已初始化,false - 另请参见:
-
for callback when Flight Recorder is initialized
-
-