Spec-Zone.ru › OpenJDK 17

Класс RecordingStream

java.lang.Object
jdk.jfr.consumer.RecordingStream
Все реализованные интерфейсы:
AutoCloseable, EventStream
public final class RecordingStream extends Object implements AutoCloseable, EventStream
Поток записи генерирует события из текущей JVM (Java Virtual Machine).

Следующий пример демонстрирует, как записать события с помощью стандартной конфигурации и вывести события Garbage Collection, CPU Load и JVM Information в стандартный вывод.

 Configuration c = Configuration.getConfiguration("default");
 try (var rs = new RecordingStream(c)) {
     rs.onEvent("jdk.GarbageCollection", System.out::println);
     rs.onEvent("jdk.CPULoad", System.out::println);
     rs.onEvent("jdk.JVMInformation", System.out::println);
     rs.start();
 }
 
С момента:
14

Краткое описание конструкторов

Конструктор Описание
RecordingStream()
Создаёт поток событий для текущей JVM (Java Virtual Machine).
RecordingStream(Configuration configuration)
Создаёт поток записи, используя настройки из конфигурации.

Краткое описание методов

Модификатор и тип Метод Описание
void awaitTermination()
Ожидает завершения всех действий, или закрытия потока, или прерывания текущей нити, в зависимости от того, что произойдёт раньше.
void awaitTermination(Duration timeout)
Ожидает завершения всех действий, или закрытия потока, или истечения таймаута, или прерывания текущей нити, в зависимости от того, что произойдёт раньше.
void close()
Закрывает этот ресурс, высвобождая все связанные ресурсы.
EventSettings disable(Class<? extends Event> eventClass)
Отключает событие.
EventSettings disable(String name)
Отключает событие с указанным именем.
void dump(Path destination)
Записывает данные записи в файл.
EventSettings enable(Class<? extends Event> eventClass)
Включает событие.
EventSettings enable(String name)
Включает событие с указанным именем.
void onClose(Runnable action)
Регистрирует действие, которое должно быть выполнено при закрытии потока.
void onError(Consumer<Throwable> action)
Регистрирует действие, которое должно быть выполнено при возникновении исключения.
void onEvent(String eventName, Consumer<RecordedEvent> action)
Регистрирует действие, которое должно быть выполнено для всех событий, соответствующих имени.
void onEvent(Consumer<RecordedEvent> action)
Регистрирует действие, которое должно быть выполнено для всех событий в потоке.
void onFlush(Runnable action)
Регистрирует действие, которое должно быть выполнено после того, как поток был сброшен.
boolean remove(Object action)
Удаляет регистрацию действия.
void setEndTime(Instant endTime)
Указывает конечную временную метку потока.
void setMaxAge(Duration maxAge)
Определяет, насколько долго данные сохраняются для потока.
void setMaxSize(long maxSize)
Определяет, сколько данных сохраняется для потока.
void setOrdered(boolean ordered)
Указывает, что события поступают в хронологическом порядке, отсортированные по времени их записи в поток.
void setReuse(boolean reuse)
Указывает, что объект события в действии EventStream.onEvent(Consumer) может быть повторно использован.
void setSettings(Map<String,String> settings)
Заменяет все настройки для этого потока записи.
void setStartTime(Instant startTime)
Указывает начальную временную метку потока.
void start()
Начинает обработку действий.
void startAsync()
Начинает асинхронную обработку действий.

Методы, унаследованные от класса java.lang.Object

clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait

Методы, унаследованные от интерфейса jdk.jfr.consumer.EventStream

onMetadata

Подробное описание конструкторов

RecordingStream

public RecordingStream()
Создаёт поток событий для текущей виртуальной машины Java (JVM).
Исключение:
IllegalStateException - если Запись событий не может быть создана (например, если виртуальная машина Java (JVM) не поддерживает Запись событий, или если хранилище файлов не может быть создано или обработано)
SecurityException - если существует менеджер безопасности, и у вызывающего объекта нет FlightRecorderPermission("accessFlightRecorder")

RecordingStream

public RecordingStream(Configuration configuration)
Создаёт поток записи, используя настройки из конфигурации.

Следующий пример показывает, как создать поток записи, использующий предопределённую конфигурацию.

 var c = Configuration.getConfiguration("default");
 try (var rs = new RecordingStream(c)) {
   rs.onEvent(System.out::println);
   rs.start();
 }
 
Параметры:
configuration - конфигурация, содержащая используемые настройки, а не null
Исключение:
IllegalStateException - если Запись событий не может быть создана (например, если виртуальная машина Java (JVM) не поддерживает Запись событий, или если хранилище файлов не может быть создано или обработано)
SecurityException - если используется менеджер безопасности и разрешение FlightRecorderPermission "accessFlightRecorder" не задано.
См. также:
  • Configuration

Подробное описание методов

enable

public EventSettings enable(String name)
Включает событие с указанным именем.

Если несколько событий имеют одинаковое имя (например, один и тот же класс загружен в разных загрузчиках классов), тогда все события, соответствующие имени, включаются. Чтобы включить определённый класс, используйте метод enable(Class) или представление типа события ID.

Параметры:
name - настройки события, не null
Возвращает:
настройки события для дальнейшей конфигурации, не null
См. также:
  • EventType

setSettings

public void setSettings(Map<String,String> settings)
Заменяет все настройки для этого потока записи.

Следующий пример записывает 20 секунд, используя конфигурацию "default", а затем изменяет настройки на конфигурацию "profile".

 Configuration defaultConfiguration = Configuration.getConfiguration("default");
 Configuration profileConfiguration = Configuration.getConfiguration("profile");
 try (var rs = new RecordingStream(defaultConfiguration)) {
    rs.onEvent(System.out::println);
    rs.startAsync();
    Thread.sleep(20_000);
    rs.setSettings(profileConfiguration.getSettings());
    Thread.sleep(20_000);
 }
 
Параметры:
settings - настройки для установки, не null
См. также:
  • Recording.setSettings(Map)

enable

public EventSettings enable(Class<? extends Event> eventClass)
Включает событие.
Параметры:
eventClass - событие для включения, не null
Возвращает:
настройки события для дальнейшей конфигурации, не null
Исключение:
IllegalArgumentException - если eventClass является абстрактным классом или не является подклассом Event

disable

public EventSettings disable(String name)
Отключает событие с указанным именем.

Если несколько событий с одинаковым именем (например, один и тот же класс загружен в разных загрузчиках классов), все события, соответствующие имени, отключаются. Чтобы отключить конкретный класс, используйте метод disable(Class) или представление типа события ID.

Параметры:
name - настройки события, не null
Возвращает:
настройки события для дальнейшей конфигурации, не null

disable

public EventSettings disable(Class<? extends Event> eventClass)
Отключает событие.
Параметры:
eventClass - событие для отключения, не null
Возвращает:
настройки события для дальнейшей конфигурации, не null
Исключение:
IllegalArgumentException - если eventClass является абстрактным классом или не является подклассом Event

setMaxAge

public void setMaxAge(Duration maxAge)
Определяет, как долго данные сохраняются для потока.

Для управления количеством данных записи, хранящихся на диске, можно указать максимальное время хранения данных. Данные, хранящиеся на диске и старше указанного времени, удаляются виртуальной машиной Java (JVM).

Если не заданы ни максимальный предел, ни максимальный срок, размер записи может неограниченно расти, если события включены

Параметры:
maxAge - продолжительность хранения данных, или null для бесконечности
Исключение:
IllegalArgumentException - если maxAge отрицательно
IllegalStateException - если запись находится в состоянии CLOSED

setMaxSize

public void setMaxSize(long maxSize)
Определяет, сколько данных сохраняется для потока.

Для управления количеством данных записи, хранящихся на диске, можно указать максимальный объём данных для хранения. Когда максимальный предел превышен, виртуальная машина Java (JVM) удаляет самую старую часть, чтобы освободить место для более новой.

Если не заданы ни максимальный предел, ни максимальный срок, размер записи может неограниченно расти.

Размер измеряется в байтах.

Параметры:
maxSize - объём данных для хранения, 0 для бесконечности
Исключение:
IllegalArgumentException - если maxSize отрицательно
IllegalStateException - если запись находится в состоянии CLOSED

setReuse

public void setReuse(boolean reuse)
Описание скопировано из интерфейса: EventStream
Указывает, что объект события в действии EventStream.onEvent(Consumer) может быть повторно использован.

Если повторное использование установлено в true, действие не должно хранить ссылку на объект события после завершения действия.

Определяется в:
setReuse в интерфейсе EventStream
Параметры:
reuse - true если объект события может быть повторно использован, false в противном случае

setOrdered

public void setOrdered(boolean ordered)
Описание скопировано из интерфейса: EventStream
Указывает, что события приходят в хронологическом порядке, отсортированные по времени их записи в поток.
Определяется в:
setOrdered в интерфейсе EventStream
Параметры:
ordered - если объекты событий приходят в хронологическом порядке в EventStream.onEvent(Consumer)

setStartTime

public void setStartTime(Instant startTime)
Описание скопировано из интерфейса: EventStream
Устанавливает начальное время потока.

Начальное время должно быть установлено до запуска потока.

Определяется в:
setStartTime в интерфейсе EventStream
Параметры:
startTime - начальное время, не null
См. также:
  • EventStream.start()
  • EventStream.startAsync()

setEndTime

public void setEndTime(Instant endTime)
Описание скопировано из интерфейса: EventStream
Устанавливает конечное время потока.

Конечное время должно быть установлено до запуска потока.

В конечное время поток закрывается.

Определяется в:
setEndTime в интерфейсе EventStream
Параметры:
endTime - конечное время, не null
См. также:
  • EventStream.start()
  • EventStream.startAsync()

onEvent

public void onEvent(String eventName, Consumer<RecordedEvent> action)
Описание скопировано из интерфейса: EventStream
Регистрирует действие для выполнения на всех событиях, соответствующих имени.
Определяется в:
onEvent в интерфейсе EventStream
Параметры:
eventName - имя события, не null
action - действие для выполнения на каждом RecordedEvent, соответствующем имени события, не null

onEvent

public void onEvent(Consumer<RecordedEvent> action)
Описание скопировано из интерфейса: EventStream
Регистрирует действие для выполнения на всех событиях в потоке.
Определяется в:
onEvent в интерфейсе EventStream
Параметры:
action - действие для выполнения на каждом RecordedEvent, не null

onFlush

public void onFlush(Runnable action)
Описание скопировано из интерфейса: EventStream
Регистрирует действие, которое выполняется после сброса потока.
Определено в:
onFlush в интерфейсе EventStream
Параметры:
action - действие, выполняемое после сброса потока, не null

onClose

public void onClose(Runnable action)
Описание скопировано из интерфейса: EventStream
Регистрирует действие, которое выполняется при закрытии потока.

Если поток уже закрыт, действие будет выполнено немедленно в текущей нити.

Определено в:
onClose в интерфейсе EventStream
Параметры:
action - действие, выполняемое после закрытия потока, не null
См. также:
  • EventStream.close()

onError

public void onError(Consumer<Throwable> action)
Описание скопировано из интерфейса: EventStream
Регистрирует действие, которое выполняется, если произойдет исключение.

Если действие не зарегистрировано, трассировка стека исключений выводится в стандартный поток ошибок.

Регистрация действия переопределяет поведение по умолчанию. Если зарегистрировано несколько действий, они выполняются в порядке регистрации.

Если этот метод сам вызывает исключение, поведение не определено.

Определено в:
onError в интерфейсе EventStream
Параметры:
action - действие, выполняемое при возникновении исключения, не null

close

public void close()
Описание скопировано из интерфейса: AutoCloseable
Закрывает этот ресурс, освобождая все связанные ресурсы. Этот метод вызывается автоматически для объектов, управляемых оператором try-с-ресурсами.
Определено в:
close в интерфейсе AutoCloseable
Определено в:
close в интерфейсе EventStream

remove

public boolean remove(Object action)
Описание скопировано из интерфейса: EventStream
Удаляет зарегистрированное действие.

Если действие зарегистрировано несколько раз, все экземпляры удаляются.

Определено в:
remove в интерфейсе EventStream
Параметры:
action - действие для удаления, не null
Возвращает:
true если действие было удалено, false в противном случае
См. также:
  • EventStream.onEvent(Consumer)
  • EventStream.onEvent(String, Consumer)
  • EventStream.onFlush(Runnable)
  • EventStream.onClose(Runnable)
  • EventStream.onError(Consumer)

start

public void start()
Описание скопировано из интерфейса: EventStream
Начинает обработку действий.

Действия выполняются в текущей нити.

Чтобы остановить поток, используйте метод EventStream.close().

Определено в:
start в интерфейсе EventStream

startAsync

public void startAsync()
Запускает асинхронную обработку действий.

Действия выполняются в отдельной нити.

Чтобы остановить поток, используйте метод close().

Следующий пример выводит использование ЦП в течение десяти секунд. Когда текущая нить выходит из блока try-with-resources, поток останавливается/закрывается.

 try (var stream = new RecordingStream()) {
   stream.enable("jdk.CPULoad").withPeriod(Duration.ofSeconds(1));
   stream.onEvent("jdk.CPULoad", event -> {
     System.out.println(event);
   });
   stream.startAsync();
   Thread.sleep(10_000);
 }
 
Определено в:
startAsync в интерфейсе EventStream
Исключения:
IllegalStateException - если поток уже запущен или закрыт

dump

public void dump(Path destination) throws IOException
Записывает данные записи в файл.

Поток записи должен быть запущен, но не закрыт.

Настоятельно рекомендуется установить максимальный срок действия или максимальный размер перед запуском потока. В противном случае дамп может не содержать никаких событий.

Параметры:
destination - местоположение, куда записываются данные записи, не null
Исключения:
IOException - если данные записи не могут быть скопированы в указанное местоположение, или если поток закрыт, или не запущен.
SecurityException - если существует менеджер безопасности, и у вызывающего объекта нет FilePermission для записи в целевой путь
С:
17
См. также:
  • setMaxAge(Duration)
  • setMaxSize(long)

awaitTermination

public void awaitTermination(Duration timeout) throws InterruptedException
Описание скопировано из интерфейса: EventStream
Ожидает завершения всех действий, или закрытия потока, или истечения таймаута, или прерывания текущей нити, в зависимости от того, что произойдет раньше.
Определено в:
awaitTermination в интерфейсе EventStream
Параметры:
timeout - максимальное время ожидания, не null
Исключения:
InterruptedException - если ожидание было прервано
См. также:
  • EventStream.start()
  • EventStream.startAsync()
  • Thread.interrupt()

awaitTermination

public void awaitTermination() throws InterruptedException
Описание скопировано из интерфейса: EventStream
Ожидает завершения всех действий, или закрытия потока, или прерывания текущей нити, в зависимости от того, что произойдет раньше.
Определено в:
awaitTermination в интерфейсе EventStream
Исключения:
InterruptedException - если ожидание было прервано
См. также:
  • EventStream.start()
  • EventStream.startAsync()
  • Thread.interrupt()

© 1993, 2021, 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/17/docs/api/jdk.jfr/jdk/jfr/consumer/RecordingStream.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API