JEP 234: Additional Run-Time Compiler JVM Trace Events
Дополнительные события трассировки JVM от компиляторов времени выполнения
| Ответственный | Igor Ignatyev |
| Тип | Feature |
| Область | Implementation |
| Статус | Candidate |
| Компонент | hotspot / compiler |
| Обсуждение | hotspot dash compiler dash dev at openjdk dot java dot net |
| Трудоёмкость | M |
| Длительность | M |
| Рецензенты | Aleksandre Iline, Mikael Vidstedt, Vladimir Kozlov |
| Одобрен | Mikael Vidstedt |
| Создан | 2014/05/19 18:32 |
| Обновлён | 2021/10/22 17:17 |
| Задача | 8043473 |
Аннотация
Расширить набор событий трассировки JVM, которые генерируют компиляторы времени выполнения.
Критерии успеха
- Отсутствие измеримых накладных расходов на производительность, когда события не включены.
Мотивация
JEP 167 добавил инфраструктуру для подробной трассировки JVM. В нём появился базовый набор полезных событий компиляторов времени выполнения, но этот набор не даёт никакой информации о том, какие оптимизации были применены, что эти оптимизации сделали, почему компиляция завершилась неудачей и т. д.
Описание
Определить дополнительные события, которые подробнее покажут работу компиляторов времени выполнения и будут полезны как для тестирования, так и для профилирования.
Некоторые события фаз компиляции C2 уже генерирует; при необходимости мы доработаем C1, чтобы он тоже их генерировал.
События фаз компиляции будут содержать информацию, в том числе идентификатор компиляции и представление компилируемого метода или его существенных характеристик, и будут генерироваться в конце фазы. Если фаза компиляции завершится неудачей, будет сгенерировано событие с описанием сбоя. Фазы, для которых мы рассмотрим добавление событий:
- Разбор
- Граф высокого уровня
- Низкоуровневое промежуточное представление
- Машинно-независимый код
- Ассемблирование
События о применённых оптимизациях будут содержать идентификатор компиляции и описывать выполненные преобразования. События будут генерироваться по завершении оптимизации. События будут определены как минимум для всех высокоуровневых оптимизаций, например:
- Встраивание
- Развёртывание циклов
- Отделение итераций цикла (loop peeling)
Также будут генерироваться другие события, влияющие на компиляцию и выполнение скомпилированного метода, например:
- События деоптимизации
- События uncommon trap (ловушки для редких случаев)
- События о нештатных ситуациях:
- Достигнут максимальный предел числа узлов
- Достигнута максимальная глубина рекурсии
Альтернативы
Эту информацию можно получить с помощью API для тестирования методом белого ящика (white-box testing API), но в нём нет средств для записи событий для последующего анализа.