Когда сборщик мусора стирает экземпляр объекта, который использует шаблон Singleton?

Когда сборщик мусора стирает экземпляр объекта, который использует шаблон Singleton?

Объект висит вокруг больше, чем обычный объект?

Как вы можете вручную принудительно удалить сборку / удаление мусора объекта в Java?

Благодарю.

Существует статическая ссылка на синглтон, поэтому он не будет иметь права на garbage collection до тех пор, пока classный загрузчик не будет допущен к сбору мусора.

Вы не можете заставить любой объект собирать мусор; вы можете запросить , чтобы сборщик мусора System.gc() с System.gc() но это только запрос.

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

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

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

Одиночный class имеет статическую ссылку на экземпляр объекта singleton и, следовательно, он никогда не будет собирать мусор, если только не указано, как Джон Скит, как указано, что контекст, загружающий этот class (загрузчик classов), сам по себе имеет право на garbage collection, и в этом случае статическая ссылка будет больше не будет GC-корнем.

Соответствующий ответ здесь .

Я думаю, что это была ошибка перед Java 1.2, когда экземпляр singleton мог быть собран с помощью мусора, если глобальная ссылка на него не была, но это было исправлено в Java 1.2, и только теперь он может иметь право на garbage collection, если загруженный загрузчик classов этот class был собран мусором.

static поля могут и могут получить GCed, однако это не происходит в простом приложении.

Статические поля ссылаются на class, а class ссылается на ClassLoader. ClassLoader ссылается на каждый class и каждый экземпляр этого classа.

Однако в контейнерах OSGi и серверах приложений нет ничего необычного в том, чтобы отбрасывать каждую ссылку на приложение или библиотеку и это загрузчик classов. На этом этапе загрузчик classов и каждое статическое поле могут быть GC-ed.

Interesting Posts

-webkit-margin добавляет нежелательные поля в тексты

Динамическое распределение неизвестной матрицы в C

Возможно ли запланировать мой ноутбук для отключения звука и включения звука в определенное время?

Наложение двух графиков ggplot2 stat_density2d с альфа-каналами

Как восстановить удаленные файлы?

Спящий режим и загрузка в другую ОС: будут ли повреждены мои файловые системы?

Taskhostw.exe продолжает воспроизведение ir_begin.wav после обновления Win10

Угловой UI-маршрутизатор Как создать «макет»?

Что заставляет мой беспроводной маршрутизатор прекратить маршрутизацию соединений HTTP (порт 80)?

Как я могу получить путь приложения в консольном приложении .NET?

Что произойдет, если я извлечу свой жесткий диск из текущего компьютера и поставлю его на новый компьютер?

широковещательный приемник не получит событие камеры

Постоянное соединение в витой

«Использование пространства имен» в заголовках c ++

DIRCA_CHECKFX Возвращаемое значение 3 – Проект развертывания VS 2013

Давайте будем гением компьютера.