Как отлаживать загрузку ресурсов 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.

Дополнительная информация