Как отладить загрузку ресурсов JVM?

Обновлено: В соответствии с комментариями и вашими разъяснениями: невозможно написать свой код, безопасный для типов, если вы не знаете его заранее. В этом нет смысла.

Таким образом, вы должны продолжать использовать отражение или свой собственный способ регистрации метаданных типа (перечисление или класс, содержащий некоторую полезную информацию о его типе).

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


Старый и менее релевантный: Если вы знаете тип во время компиляции, вы можете использовать дженерики, чтобы он выглядел немного более упорядоченным:

public T GetValueOrDefault<T>(string key)
{
    if (this.dictionary.TryGetValue(key, out object o))
    {
        return (T)(object)o;
    }

    return default(T);
}

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

14
задан Suma 21 August 2015 в 09:18
поделиться

3 ответа

Я полагаю, вам нужно взглянуть на использование профилировщика. Или что-то, что использует интерфейс инструментовки.

Не уверен, насколько он стабилен, но есть BTrace , который является разновидностью Java-версии DTrace.

BTrace - безопасный, динамический инструмент трассировки для платформы Java. BTrace можно использовать для динамического отслеживания работающей Java-программы. BTrace динамически инструктирует классы целевого приложения для внедрения кода трассировки («отслеживание байт-кода»). Код трассировки выражен на языке программирования Java.

Если вы делаете это на компьютере разработчика, и число событий (загружаемых ресурсов) не слишком частое, вы также можете просто установить точку останова в отладчике.

3
ответ дан 1 December 2019 в 15:22
поделиться

Ресурсы предоставляются как URL s. Итак, я думаю сделать это в «чистой» Java: установить собственный ClassLoader , который копирует URL в версию с пользовательским URLStreamHandler . Поместите ваш код мониторинга в обработчик потока и перешлите к оригиналу.

2
ответ дан 1 December 2019 в 15:22
поделиться

В среде Linux вы можете попробовать:

lsof -p <jvm pid>

Он выдаст вам список с дескрипторы, используемые программой, связанной с указанным pid.

Подробнее

1
ответ дан 1 December 2019 в 15:22
поделиться
Другие вопросы по тегам:

Похожие вопросы: