- 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 
 
 -  
 
 -