Spec-Zone.ru › OpenJDK 25

Пакет jdk.jfr

package jdk.jfr
Этот пакет содержит классы для создания событий и управления Flight Recorder.

Определение событий

Flight Recorder собирает данные в виде событий. Событие содержит временную метку, длительность и, как правило, полезную нагрузку, специфичную для приложения и полезную для диагностики работающего приложения вплоть до сбоя или аварийного завершения.

Чтобы определить событие Flight Recorder, расширьте Event и добавьте поля, соответствующие типам данных полезной нагрузки. Метаданные полей, например метки, описания и единицы измерения, можно добавить с помощью аннотаций, доступных в пакете jdk.jfr, или с помощью пользовательской аннотации с аннотацией MetadataDefinition.

После определения класса события можно создавать его экземпляры (объекты событий). Данные сохраняются в событии путем присваивания значений полям. Время события можно явно контролировать с помощью методов begin и end, доступных в классе Event.

Сбор данных для сохранения в событии может быть затратным. Метод Event.shouldCommit() можно использовать, чтобы проверить, будет ли экземпляр события действительно записан в систему при вызове метода Event.commit(). Если Event.shouldCommit() возвращает false, эти операции можно пропустить.

Иногда структура полей события неизвестна во время компиляции. В этом случае событие можно определить динамически. Однако производительность динамических событий может быть ниже, чем у статически определенных, а инструменты могут быть не в состоянии распознать и визуализировать данные, не зная их структуры.

Чтобы динамически определить событие, используйте класс EventFactory, определите поля с помощью класса ValueDescriptor и определите аннотации с помощью класса AnnotationElement. Используйте фабрику для создания события и метод Event.set(int, Object) для заполнения его данными.

Управление Flight Recorder

Flight Recorder можно контролировать локально с помощью средства командной строки jcmd или удаленно с помощью интерфейса FlightRecorderMXBean, зарегистрированного в платформенном MBeanServer. Если требуется прямой программный доступ, экземпляр Flight Recorder можно получить, вызвав FlightRecorder.getFlightRecorder(), а запись создать с помощью класса Recording, в котором настраивается объем записываемых данных.

Параметры и конфигурация

Параметр состоит из пары имя/значение, где имя указывает событие и параметр, который нужно настроить, а значение указывает, какое значение ему присвоить.

Имя можно сформировать следующими способами:

<event-name> + "#" + <setting-name>

или

<event-id> + "#" + <setting-name>

Например, чтобы установить для события CPU Load интервал выборки один раз в секунду, используйте имя "jdk.CPULoad#period" и значение "1 s". Если несколько событий используют одно и то же имя, например если класс события загружен несколькими загрузчиками классов, и их необходимо различать, укажите имя "56#period". Идентификатор события можно получить, вызвав метод EventType.getId(); он действителен для экземпляра виртуальной машины Java, в котором зарегистрировано событие.

Список доступных имен событий можно получить, вызвав FlightRecorder.getEventTypes() и EventType.getName(). Список доступных параметров для типа события можно получить, вызвав EventType.getSettingDescriptors() и ValueDescriptor.getName().

Предопределенные параметры

Имена параметров событий и их назначение.
Имя Описание Значение по умолчанию Формат Примеры значений
enabled Указывает, записывается ли событие "true" Строковое представление Boolean ("true" или "false") "true"
"false"
threshold Указывает длительность, ниже которой событие не записывается "0" (без ограничений) "0", если пороговое значение не используется; в противном случае — строковое представление положительного значения Long, за которым следуют пробел и одна из следующих единиц измерения:
  • "ns" (наносекунды)
  • "us" (микросекунды)
  • "ms" (миллисекунды)
  • "s" (секунды)
  • "m" (минуты)
  • "h" (часы)
  • "d" (дни)
"0"
"10 ms"
"1 s"
period Указывает интервал выдачи события, если оно является периодическим "everyChunk" "everyChunk", если периодическое событие должно выдаваться при каждом переключении файла; в противном случае — строковое представление положительного значения Long, за которым следуют пробел и одна из следующих единиц измерения:
  • "ns" (наносекунды)
  • "us" (микросекунды)
  • "ms" (миллисекунды)
  • "s" (секунды)
  • "m" (минуты)
  • "h" (часы)
  • "d" (дни)
"20 ms"
"1 s"
"everyChunk"
stackTrace Указывает, записывается ли стек вызовов из метода Event.commit() "true" Строковое представление Boolean ("true" или "false") "true",
"false"
throttle Указывает максимальную частоту событий за единицу времени. "off" (без ограничения частоты) "off", если частоту событий ограничивать не нужно; в противном случае — строковое представление положительного значения Long, за которым следуют косая черта ("/") и одна из следующих единиц измерения:
  • "ns" (наносекунды)
  • "us" (микросекунды)
  • "ms" (миллисекунды)
  • "s" (секунды)
  • "m" (минуты)
  • "h" (часы)
  • "d" (дни)
"off"
"100/s"
"1000/m"
filter Указывает фильтр для события "" (пустая строка) Пустая строка, если фильтр не используется. В противном случае — фильтр, который можно использовать с событиями jdk.MethodTrace или jdk.MethodTiming и который соответствует следующей грамматике:
filter ::= target (";" target)*
target ::= class | class-method | method | annotation
class ::= identifier ("." identifier)*
class-method ::= class method
method ::= "::" method-name
method-name ::= identifier | "<clinit>" | "<init>"
annotation ::= "@" class
identifier ::= see JLS 3.8
"java.lang.String"
"::<clinit>"
"java.util.HashMap::resize"
"java.io.FileDescriptor::<init>;java.io.FileDescriptor::close"
"@jakarta.ws.rs.GET"

Обработка null

В Javadoc для всех методов указано, принимают ли они null или возвращают его. Обычно это выражается как "not null". Если параметру null присвоено значение в месте, где это не допускается, выбрасывается исключение java.lang.NullPointerException. Если методу, который выбрасывает другие исключения, например java.io.IOException, передан параметр null, приоритет имеет исключение java.lang.NullPointerException, если только в Javadoc метода явно не указано, как обрабатывается null, то есть путем выбрасывания исключения java.lang.IllegalArgumentException.

Начиная с версии:
9
Пакет Описание
jdk.jfr.consumer
Этот пакет содержит классы для обработки данных Flight Recorder.
Класс Описание
AnnotationElement
Описывает метаданные события, например метки, описания и единицы измерения.
BooleanFlag
Аннотация поля события, указывающая, что значение является логическим флагом — значением true или false.
Category
Аннотация события, связывающая тип события с категорией, заданной в виде понятного человеку пути.
Configuration
Набор параметров и метаданных, описывающих конфигурацию.
ContentType
Метааннотация, указывающая, что аннотация представляет тип содержимого, например интервал времени или частоту.
Contextual
Аннотация поля события, указывающая, что значение содержит контекстную информацию.
DataAmount
Аннотация поля события, указывающая, что значение представляет объем данных (например, в байтах).
Description
Аннотация, описывающая элемент одним или двумя предложениями.
Enabled
Аннотация события, определяющая, должно ли событие быть включено по умолчанию.
Event
Базовый класс событий, от которого следует наследоваться для определения событий и их полей.
EventFactory
Класс для определения события во время выполнения.
EventSettings
Вспомогательный класс для применения параметров событий к записи.
EventType
Описывает событие, его поля, параметры и аннотации.
Experimental
Аннотация, указывающая, что элемент является экспериментальным и может измениться без предупреждения.
FlightRecorder
Класс для доступа к Flight Recorder, управления им и его администрирования.
FlightRecorderListener
Интерфейс обратного вызова для отслеживания жизненного цикла Flight Recorder.
FlightRecorderPermission Устарело, будет удалено: этот элемент API может быть удален в будущей версии.
Это разрешение нельзя использовать для управления доступом к ресурсам, поскольку диспетчер безопасности больше не поддерживается.
Frequency
Аннотация поля события, указывающая, что значение является частотой, измеряемой в Гц.
Label
Аннотация, задающая понятное человеку имя элемента (например, "Maximum Throughput").
MemoryAddress
Аннотация поля события, указывающая, что значение является адресом памяти.
MetadataDefinition
Метааннотация для определения новых типов метаданных событий.
Name
Аннотация, задающая имя элемента по умолчанию.
Percentage
Аннотация поля события, применяемая к дробным значениям, обычно находящимся в диапазоне от 0.0 до 1.0, чтобы указать, что значение является процентом.
Period
Аннотация события, указывающая значение параметра по умолчанию для периодического события.
Recording
Предоставляет средства для настройки, запуска и остановки записи, а также для сохранения данных записи на диск.
RecordingState
Указывает состояние в жизненном цикле записи.
Registered
Аннотация события для программной регистрации событий.
Relational
Метааннотация для реляционных аннотаций, применяемая к аннотации.
SettingControl
Базовый класс, от которого следует наследоваться для создания элементов управления параметрами.
SettingDefinition
Аннотация, указывающая, что метод в классе события следует использовать для фильтрации событий.
SettingDescriptor
Описывает параметр события.
StackTrace
Аннотация события, определяющая, содержит ли событие по умолчанию стек вызовов.
Threshold
Аннотация события, указывающая длительность по умолчанию, ниже которой событие не записывается (например, "20 ms").
Throttle
Аннотация события, указывающая максимальную частоту событий за единицу времени (например, "100/s").
Timespan
Аннотация поля события, указывающая, что значение является длительностью.
Timestamp
Аннотация поля события, указывающая, что значение является моментом времени.
TransitionFrom
Аннотация поля события, указывающая, что событие произошло при переходе из потока.
TransitionTo
Аннотация поля события, указывающая, что событие вскоре перейдет к потоку.
Unsigned
Аннотация поля события, указывающая, что значение имеет беззнаковый тип данных.
ValueDescriptor
Описывает поля события и элементы аннотаций.

Сообщить об ошибке или предложить улучшение
Дополнительные справочные материалы по API и документацию для разработчиков см. в документации Java SE, содержащей более подробные описания для разработчиков, включая общие сведения, определения терминов, обходные решения и работающие примеры кода. Другие версии.
Java является товарным знаком или зарегистрированным товарным знаком Oracle и/или ее аффилированных лиц в США и других странах.
Авторские права © 1993, 2025, Oracle и/или ее аффилированные лица, 500 Oracle Parkway, Redwood Shores, CA 94065 USA.
Все права защищены. Использование регулируется условиями лицензии и политикой распространения документации.

© 1993, 2025, 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/25/docs/api/jdk.jfr/jdk/jfr/package-summary.html

Spec-Zone.ru

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