Как отлаживать загрузку ресурсов JVM?
Чтобы отлаживать загрузку классов в JVM, мы можем использовать param -verbose:class
, но... Любой знает, как отлаживать загрузку ресурсов (например, файлы свойств)?
Ответы
Ответ 1
Полагаю, вам нужно взглянуть на использование профилировщика. Или что-то, что использует интерфейс инструментария.
Не уверен, насколько он стабилен, но есть BTrace, который является видом Java-версии DTrace.
BTrace - это безопасный инструмент динамической трассировки для платформы Java. BTrace можно использовать для динамического отслеживания запущенной Java-программы. BTrace динамически применяет классы целевого приложения для ввода кода трассировки ( "трассировка байт-кода" ). Трассировочный код выражается в языке программирования Java.
Если вы делаете это на машине разработки, а количество событий (загружаемых ресурсов) не слишком часто, вы также можете просто установить точку останова в отладчике.
Ответ 2
Ресурсы предоставляются как URL
s. Итак, я думаю, что нужно сделать это в "чистой" Java: установите пользовательский ClassLoader
, который копирует URL
в версию с пользовательским URLStreamHandler
. Поместите свой контрольный код в обработчик потока и перейдите к оригиналу.
Ответ 3
Вы можете использовать InTrace для управления классами Classloader, которые выполняют загрузку.
Для Sun JVM я бы предложил использовать следующие шаблоны Include для отслеживания соответствующих классов:
- ClassLoader
- URLClassPath
- Loader
Ответ 4
В среде Linux вы можете попробовать:
lsof -p <jvm pid>
Он предоставит вам список с дескрипторами, используемыми программой, связанной с указанным pid.
Дополнительная информация
Ответ 5
Существует несколько методов для отладки проблем с загрузкой классов. Вот хорошие слайды от создателей JRebel, обобщающих эти методы: Вы действительно получаете загрузчики классов?