Подтвердить что ты не робот

Возможно ли увидеть все ссылки на объект во время выполнения?

Есть ли способ увидеть все ссылки на объект во время выполнения?

Я использую Netbeans, эта функция существует в нем?

РЕДАКТИРОВАТЬ: Нет проблем с использованием профилировщиков для этого, мне нужно знать только ссылки, не имеет значения.

4b9b3361

Ответ 1

Хорошо, Netbeans показывают все ссылки на объект.

Сначала запустите проект в режиме отладки CTRL + F5, после, покажите загруженные классы Alt + Shift + 4 или Window->Debug->Loaded Classes.

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

Приостановить выполнение и есть.

В верхней части находятся атрибуты объекта, а внизу - все ссылки на него.

In the bottom area where is "Referências" shows the references of the selected object

Ответ 2

Если вы сбросите кучу и проанализируете ее, вы найдете все ссылки. Такие профилиры, как VisualVM и YourKit, могут сделать это для вас.

Однако его невозможно определить динамически. Если вы хотите знать все, что относится к объекту, вы должны сами сохранить коллекцию.

Ответ 3

В Netbeans вы можете использовать функцию Найти использование, чтобы увидеть, где определенный класс может быть указан внутри конкретного проекта.

В Проводнике проекта выберите класс и щелкните правой кнопкой мыши > Поиск использования.

Результаты немного похожи на следующие изображения:

Find Usage Results

Ответ 4

Извините, не было ясно. Я хочу ссылки во время выполнения. Все рефери созданного объекта

К сожалению, такой функции нет в Java. Но есть способ получить уведомление о том, что больше нет ссылки на объект во время выполнения.

Решение состоит в том, чтобы создать слабую ссылку на объект и контролируемого связать его с ссылка очереди. Когда не будет более жесткой ссылки на этот объект, GC будет рано или поздно вспоминать об этом и помещать слабую ссылку. Вы можете проверить это с помощью isEnqueued().

Если вы предоставите больше информации о своей проблеме, возможно, мы можем дать больше советов и трюков.

ИЗМЕНИТЬ

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

Когда вы закончите с объектом соединения, закройте его в прокси-объекте. Если другие части кода по-прежнему пытаются получить доступ к этим объектам соединения через прокси-сервер, вы сможете обнаружить его в прокси-сервере при его вызове.

Это трюк, который вы можете использовать, чтобы найти, какая часть кода по-прежнему "ссылается" на ваш объект, так сказать.

Надеюсь, что это поможет.