Что я хочу сделать
У меня есть программа на Java, которую я пытаюсь улучшить.Я подозреваю, что синхронизированные блоки в коде снижают производительность, но я хотел бы убедиться, что это моя проблема, прежде чем касаться моего кода.
Как я об этом говорил
Чтобы проверить, действительно ли проблема с синхронизированными блоками, я записал выполнение моей программы на тестовом сервере с помощью Flight Recorder, скачал созданный файл jfr
на моем рабочем столе и открыл его с помощью Java Mission Control.Однако страница Lock Instances
в Java Application
ничего не показывает.Единственная подсказка, которую я получаю, - это сообщение в представлении «Результаты», которое гласит:
Правило блокировки Java требует, чтобы события были доступны для следующих типов событий: com.oracle.jdk.JavaMonitorEnter
Поэтому я предполагаю, что должна быть какая-то опция для активации вместе с регистратором полета, но я пока не смог ее найти.
Мой вопрос
Как включить запись событий типа com.oracle.jdk.JavaMonitorEnter
с помощью Java Flight Recorder?
Или я что-то упускаю, и есть лучший способвыяснить, сколько блокировок синхронизированных блоков выполняется в программе на Java?
Моя среда
Я использую Oracle JDK версии 1.8.0_191.Версия Java Mission Control, которую я использую на своем рабочем столе, - 6.0.0.Наконец, команда, которую я использую для записи выполнения моей программы, выглядит следующим образом:
java -XX:+UnlockCommercialFeatures -XX:+UnlockDiagnosticVMOptions -XX:+DebugNonSafepoints -XX:+FlightRecorder -XX:StartFlightRecording=settings=profile,dumponexit=true,filename=test.jfr -classpath lib/*:src/ <my program with its arguments>
Я должен также добавить, что подключение к серверу напрямую с помощью Java Mission Control не является опцией (или это так?), Поскольку яя использую отскок SSH для фактического подключения к нему ...