Closeable
, AutoCloseable
public final class Recording extends Object implements Closeable
The following example shows how configure, start, stop and dump recording data to disk.
Configuration c = Configuration.getConfiguration("default");
try (Recording r = new Recording(c)) {
r.start();
System.gc();
Thread.sleep(5000);
r.stop();
r.dump(Files.createTempFile("my-recording", ".jfr"));
}
Constructor | Description |
---|---|
Recording() |
Creates a recording without any settings. |
Recording |
Creates a recording with settings from a map of name-value pairs. |
Recording |
Creates a recording with settings from a configuration. |
Modifier and Type | Method | Description |
---|---|---|
void |
close() |
Releases all data that is associated with this recording. |
Recording |
copy |
Returns a clone of this recording, with a new recording ID and name. |
EventSettings |
disable |
Disables event. |
EventSettings |
disable |
Disables event with the specified name. |
void |
dump |
Writes recording data to a file. |
EventSettings |
enable |
Enables event. |
EventSettings |
enable |
Enables the event with the specified name. |
Path |
getDestination() |
Returns the destination file, where recording data is written when the recording stops, or null if no destination is set. |
boolean |
getDumpOnExit() |
Returns whether this recording is dumped to disk when the JVM exits. |
Duration |
getDuration() |
Returns the specified duration for this recording, or null if no duration is set. |
long |
getId() |
Returns a unique ID for this recording. |
Duration |
getMaxAge() |
Returns the length of time that the data is kept in the disk repository before it is removed. |
long |
getMaxSize() |
Returns the maximum size, measured in bytes, at which data is no longer kept in the disk repository. |
String |
getName() |
Returns the name of this recording. |
Map |
getSettings() |
Returns settings used by this recording. |
long |
getSize() |
Returns the current size of this recording in the disk repository, measured in bytes. |
Instant |
getStartTime() |
Returns the time when this recording was started. |
RecordingState |
getState() |
Returns the recording state that this recording is currently in. |
Instant |
getStopTime() |
Returns the time when this recording was stopped. |
InputStream |
getStream |
Creates a data stream for a specified interval. |
boolean |
isToDisk() |
Returns true if this recording uses the disk repository, false otherwise. |
void |
scheduleStart |
Starts this recording after a delay. |
void |
setDestination |
Sets a location where data is written on recording stop, or null if data is not to be dumped. |
void |
setDumpOnExit |
Sets whether this recording is dumped to disk when the JVM exits. |
void |
setDuration |
Sets a duration for how long a recording runs before it stops. |
void |
setMaxAge |
Determines how far back data is kept in the disk repository. |
void |
setMaxSize |
Determines how much data is kept in the disk repository. |
void |
setName |
Sets a human-readable name (for example, "My Recording" ). |
void |
setSettings |
Replaces all settings for this recording. |
void |
setToDisk |
Determines whether this recording is continuously flushed to the disk repository or data is constrained to what is available in memory buffers. |
void |
start() |
Starts this recording. |
boolean |
stop() |
Stops this recording. |
public Recording(Map<String,String> settings)
A newly created recording is in the RecordingState.NEW
state. To start the recording, invoke the start()
method.
settings
- settings as a map of name-value pairs, not null
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 is used and FlightRecorderPermission "accessFlightRecorder" is not set.public Recording()
A newly created recording is in the RecordingState.NEW
state. To start the recording, invoke the start()
method.
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 is used and FlightRecorderPermission "accessFlightRecorder" is not set.public Recording(Configuration configuration)
The following example shows how create a recording that uses a predefined configuration.
Recording r = new Recording(Configuration.getConfiguration("default"));
RecordingState.NEW
state. To start the recording, invoke the start()
method.configuration
- configuration that contains the settings to be use, not null
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 is used and FlightRecorderPermission "accessFlightRecorder" is not set.public void start()
It's recommended that the recording options and event settings are configured before calling this method. The benefits of doing so are a more consistent state when analyzing the recorded data, and improved performance because the configuration can be applied atomically.
After a successful invocation of this method, this recording is in the RUNNING
state.
IllegalStateException
- if recording is already started or is in the CLOSED
statepublic void scheduleStart(Duration delay)
After a successful invocation of this method, this recording is in the DELAYED
state.
delay
- the time to wait before starting this recording, not null
IllegalStateException
- if the recording is not it the NEW
statepublic boolean stop()
When a recording is stopped it can't be restarted. If this recording has a destination, data is written to that destination and the recording is closed. After a recording is closed, the data is no longer available.
After a successful invocation of this method, this recording will be in the STOPPED
state.
true
if recording is stopped, false
otherwiseIllegalStateException
- if the recording is not started or is already stoppedSecurityException
- if a security manager exists and the caller doesn't have FilePermission
to write to the destination pathpublic Map<String,String> getSettings()
Modifying the returned Map
will not change the settings for this recording.
If no settings are set for this recording, an empty Map
is returned.
null
public long getSize()
The size is updated when recording buffers are flushed. If the recording is not written to the disk repository the returned size is always 0
.
0
if the recording is not written to the disk repositorypublic Instant getStopTime()
null
if this recording is not stoppedpublic Instant getStartTime()
null
if this recording is not startedpublic long getMaxSize()
0
if no maximum size is setpublic Duration getMaxAge()
null
if no maximum length of time has been setpublic String getName()
By default, the name is the same as the recording ID.
null
public void setSettings(Map<String,String> settings)
The following example shows how to set event settings for a recording.
Map<String, String> settings = new HashMap<>();
settings.putAll(EventSettings.enabled("jdk.CPUSample").withPeriod(Duration.ofSeconds(2)).toMap());
settings.putAll(EventSettings.enabled(MyEvent.class).withThreshold(Duration.ofSeconds(2)).withoutStackTrace().toMap());
settings.put("jdk.ExecutionSample#period", "10 ms");
recording.setSettings(settings);
Map<String, String> settings = recording.getSettings();
settings.putAll(additionalSettings);
recording.setSettings(settings);
settings
- the settings to set, not null
public RecordingState getState()
null
public void close()
After a successful invocation of this method, this recording is in the CLOSED
state.
close
in interface AutoCloseable
close
in interface Closeable
public Recording copy(boolean stop)
Clones are useful for dumping data without stopping the recording. After a clone is created, the amount of data to copy is constrained with the setMaxAge(Duration)
method and the setMaxSize(long)
method.
stop
- true
if the newly created copy should be stopped immediately, false
otherwisenull
public void dump(Path destination) throws IOException
For a dump to succeed, the recording must either be 1) running, or 2) stopped and to disk. If the recording is in any other state, an IOException
is thrown.
destination
- the location where recording data is written, not null
IOException
- if recording data can't be copied to the specified location, for example, if the recording is closed or the destination path is not writableSecurityException
- if a security manager exists and the caller doesn't have FilePermission
to write to the destination pathpublic boolean isToDisk()
true
if this recording uses the disk repository, false
otherwise. If no value is set, true
is returned.
true
if the recording uses the disk repository, false
otherwisepublic void setMaxSize(long maxSize)
To control the amount of recording data that is stored on disk, the maximum amount of data to retain can be specified. When the maximum limit is exceeded, the Java Virtual Machine (JVM) removes the oldest chunk to make room for a more recent chunk.
If neither maximum limit or the maximum age is set, the size of the recording may grow indefinitely.
maxSize
- the amount of data to retain, 0
if infiniteIllegalArgumentException
- if maxSize
is negativeIllegalStateException
- if the recording is in CLOSED
statepublic void setMaxAge(Duration maxAge)
To control the amount of recording data stored on disk, the maximum length of time to retain the data can be specified. Data stored on disk that is older than the specified length of time is removed by the Java Virtual Machine (JVM).
If neither maximum limit or the maximum age is set, the size of the recording may grow indefinitely.
maxAge
- the length of time that data is kept, or null
if infiniteIllegalArgumentException
- if maxAge
is negativeIllegalStateException
- if the recording is in the CLOSED
statepublic void setDestination(Path destination) throws IOException
null
if data is not to be dumped. If a destination is set, this recording is automatically closed after data is successfully copied to the destination path.
If a destination is not set, Flight Recorder retains the recording data until this recording is closed. Use the dump(Path)
method to manually write data to a file.
destination
- the destination path, or null
if recording should not be dumped at stopIllegalStateException
- if recording is in the STOPPED
or CLOSED
state.SecurityException
- if a security manager exists and the caller doesn't have FilePermission
to read, write, and delete the destination
fileIOException
- if the path is not writablepublic Path getDestination()
null
if no destination is set.null
if not set.public long getId()
public void setName(String name)
"My Recording"
).name
- the recording name, not null
IllegalStateException
- if the recording is in CLOSED
statepublic void setDumpOnExit(boolean dumpOnExit)
dumpOnExit
- if this recording should be dumped when the JVM exitspublic boolean getDumpOnExit()
If dump on exit is not set, false
is returned.
true
if the recording is dumped on exit, false
otherwise.public void setToDisk(boolean disk)
disk
- true
if this recording is written to disk, false
if in-memorypublic InputStream getStream(Instant start, Instant end) throws IOException
The stream may contain some data outside the specified range.
If the recording is not to disk, a stream can't be created and null
is returned.
start
- the start time for the stream, or null
to get data from start time of the recordingend
- the end time for the stream, or null
to get data until the present time.null
if no data is available in the interval, or the recording was not recorded to diskIllegalArgumentException
- if end
happens before start
IOException
- if a stream can't be openedpublic Duration getDuration()
null
if no duration is set. The duration can be set only when the recording is in the RecordingState.NEW
state.
null
if no duration has been set.public void setDuration(Duration duration)
By default, a recording has no duration (null
).
duration
- the duration, or null
if no duration is setIllegalStateException
- if recording is in the STOPPED
or CLOSED
statepublic EventSettings enable(String name)
If multiple events have the same name (for example, the same class is loaded in different class loaders), then all events that match the name are enabled. To enable a specific class, use the enable(Class)
method or a String
representation of the event type ID.
name
- the settings for the event, not null
null
public EventSettings disable(String name)
If multiple events with same name (for example, the same class is loaded in different class loaders), then all events that match the name is disabled. To disable a specific class, use the disable(Class)
method or a String
representation of the event type ID.
name
- the settings for the event, not null
null
public EventSettings enable(Class<? extends Event> eventClass)
eventClass
- the event to enable, not null
null
IllegalArgumentException
- if eventClass
is an abstract class or not a subclass of Event
public EventSettings disable(Class<? extends Event> eventClass)
eventClass
- the event to enable, not null
null
IllegalArgumentException
- if eventClass
is an abstract class or not a subclass of Event
© 1993, 2023, Oracle and/or its affiliates. All rights reserved.
Documentation extracted from Debian's OpenJDK Development Kit package.
Licensed under the GNU General Public License, version 2, with the Classpath Exception.
Various third party code in OpenJDK is licensed under different licenses (see Debian package).
Java and OpenJDK are trademarks or registered trademarks of Oracle and/or its affiliates.
https://docs.oracle.com/en/java/javase/21/docs/api/jdk.jfr/jdk/jfr/Recording.html