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