Java: шаблон наблюдателя и сборщик мусора

Я реализовал TableModel, регистры которого запускают PropertyChangeEvents. Моя TableModel прослушивает эти события для запуска TableModelEvents, чтобы обновить базовый JTable.

Если TableModel очищается или обновляется с помощью новых регистров... имеет ли TableModel вызывать метод "removePropertyChangeListener" в каждом регистре, чтобы позволить GC собирать эти регистры?

Предположим, что нет другой живой ссылки на эти регистры.

1 ответ

Решение

Нет. У объекта регистрации есть ссылка на вашу табличную модель (через слушателя). Так что, если регистр больше недоступен, он будет собирать мусор.

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

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

Другие вопросы по тегам