public final class FlightRecorder extends Object
This class provides the methods necessary for creating, starting, stopping, and destroying recordings.
- Since:
- 9
- 
Method SummaryModifier and Type Method Description static voidaddListener(FlightRecorderListener changeListener)Adds a recorder listener and captures theAccessControlContextto use when invoking the listener.static voidaddPeriodicEvent(Class<? extends Event> eventClass, Runnable hook)Adds a hook for a periodic event.List<EventType>getEventTypes()Returns an immutable list that contains all currently registered events.static FlightRecordergetFlightRecorder()Returns the Flight Recorder for the platform.List<Recording>getRecordings()Returns an immutable list of the available recordings.static booleanisAvailable()Returnstrueif the Java Virtual Machine (JVM) has Flight Recorder capabilities.static booleanisInitialized()Returnstrueif Flight Recorder is initialized.static voidregister(Class<? extends Event> eventClass)Registers an event class.static booleanremoveListener(FlightRecorderListener changeListener)Removes a recorder listener.static booleanremovePeriodicEvent(Runnable hook)Removes a hook for a periodic event.RecordingtakeSnapshot()Creates a snapshot of all available recorded data.static voidunregister(Class<? extends Event> eventClass)Unregisters an event class.
- 
Method Details- 
getRecordingsReturns an immutable list of the available recordings.A recording becomes available when it is created. It becomes unavailable when it is in the CLOSEDstate, typically after a call toRecording.close().- Returns:
- a list of recordings, not null
 
- 
takeSnapshotCreates a snapshot of all available recorded data.A snapshot is a synthesized recording in a STOPPPEDstate. If no data is available, a recording with size0is returned.A snapshot provides stable access to data for later operations (for example, operations to change the interval or to reduce the data size). The following example shows how to create a snapshot and write a subset of the data to a file. 
 The caller must close the recording when access to the data is no longer needed.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")); } }- Returns:
- a snapshot of all available recording data, not null
 
- 
registerRegisters an event class.If the event class is already registered, then the invocation of this method is ignored. - Parameters:
- eventClass- the event class to register, not- null
- Throws:
- IllegalArgumentException- if class is abstract or not a subclass of- Event
- SecurityException- if a security manager exists and the caller does not have- FlightRecorderPermission("registerEvent")
 
- 
unregisterUnregisters an event class.If the event class is not registered, then the invocation of this method is ignored. - Parameters:
- eventClass- the event class to unregistered, not- null
- Throws:
- IllegalArgumentException- if a class is abstract or not a subclass of- Event
- SecurityException- if a security manager exists and the caller does not have- FlightRecorderPermission("registerEvent")
 
- 
getFlightRecorderReturns the Flight Recorder for the platform.- Returns:
- a Flight Recorder instance, not null
- Throws:
- IllegalStateException- if Flight Recorder can't be created (for example, if the Java Virtual Machine (JVM) lacks Flight Recorder support, or if the file repository can't be created or accessed)
- SecurityException- if a security manager exists and the caller does not have- FlightRecorderPermission("accessFlightRecorder")
 
- 
addPeriodicEventpublic static void addPeriodicEvent(Class<? extends Event> eventClass, Runnable hook) throws SecurityExceptionAdds a hook for a periodic event.The implementation of the hook should return as soon as possible, to avoid blocking other Flight Recorder operations. The hook should emit one or more events of the specified type. When a hook is added, the interval at which the call is invoked is configurable using the "period"setting.- Parameters:
- eventClass- the class that the hook should run for, not- null
- hook- the hook, not- null
- Throws:
- IllegalArgumentException- if a class is not a subclass of- Event, is abstract, or the hook is already added
- IllegalStateException- if the event class has the- Registered(false)annotation and is not registered manually
- SecurityException- if a security manager exists and the caller does not have- FlightRecorderPermission("registerEvent")
 
- 
removePeriodicEventRemoves a hook for a periodic event.- Parameters:
- hook- the hook to remove, not- null
- Returns:
- trueif hook is removed,- falseotherwise
- Throws:
- SecurityException- if a security manager exists and the caller does not have- FlightRecorderPermission("registerEvent")
 
- 
getEventTypesReturns an immutable list that contains all currently registered events.By default, events are registered when they are first used, typically when an event object is allocated. To ensure an event is visible early, registration can be triggered by invoking the register(Class)method.- Returns:
- list of events, not null
 
- 
addListenerAdds a recorder listener and captures theAccessControlContextto use when invoking the listener.If Flight Recorder is already initialized when the listener is added, then the method FlightRecorderListener.recorderInitialized(FlightRecorder)method is invoked before returning from this method.- Parameters:
- changeListener- the listener to add, not- null
- Throws:
- SecurityException- if a security manager exists and the caller does not have- FlightRecorderPermission("accessFlightRecorder")
 
- 
removeListenerRemoves a recorder listener.If the same listener is added multiple times, only one instance is removed. - Parameters:
- changeListener- listener to remove, not- null
- Returns:
- true, if the listener could be removed,- falseotherwise
- Throws:
- SecurityException- if a security manager exists and the caller does not have- FlightRecorderPermission("accessFlightRecorder")
 
- 
isAvailablepublic static boolean isAvailable()Returnstrueif the Java Virtual Machine (JVM) has Flight Recorder capabilities.This method can quickly check whether Flight Recorder can be initialized, without actually doing the initialization work. The value may change during runtime and it is not safe to cache it. - Returns:
- true, if Flight Recorder is available,- falseotherwise
- See Also:
- for callback when Flight Recorder is initialized
 
- 
isInitializedpublic static boolean isInitialized()Returnstrueif Flight Recorder is initialized.- Returns:
- true, if Flight Recorder is initialized,- falseotherwise
- See Also:
- for callback when Flight Recorder is initialized
 
 
-