Сборка мусора в Java - обнуляет ли каждый объект явный стиль? - PullRequest
4 голосов
/ 29 июня 2011

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

Я не видел, чтобы это делалось слишком часто, и, с моей точки зрения, это, кажется, в первую очередь побеждает цель сборщика мусора.Есть ли какие-либо рекомендации / обоснования, когда эта стратегия полезна?Будете ли вы когда-нибудь сталкиваться с приложением, когда это необходимо, если вы будете осторожны с объектами?

Ответы [ 3 ]

7 голосов
/ 29 июня 2011

Установка ссылок на ноль не разрушает объекты. Это просто устраняет одну ссылку на них. Чтобы освободить память, сборщик мусора все еще требуется. Для локальных переменных это вообще не имеет значения.

3 голосов
/ 29 июня 2011

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

Этот вопрос задавался много раз раньше. Вот еще одна тема: Влияет ли назначение объектов на null в Java на сборку мусора?

0 голосов
/ 29 июня 2011

Это не будет иметь значения. Время, необходимое для сбора мусора (вновь выделенных объектов), пропорционально количеству объектов, которые должны , а не быть сборщиком мусора. Другими словами: удаление ссылок между объектами, которые должны быть собраны, не ускорит сбор мусора, а просто потратит немного времени на установку переменных в null ...

...