Java отменяет выделение объекта из кучи - PullRequest
0 голосов
/ 06 апреля 2011

В Java, чтобы выгрузить объект из кучи, достаточно ли просто написать myObject = null;, и GC позаботится об этом оттуда?

РЕДАКТИРОВАТЬ: ОК, пустьЯ объясню свой вариант использования, поскольку все предполагают, что я не должен явно обнулять объекты, мне не следует об этом беспокоиться и т. д. Это не имеет смысла.Я сериализую объект и «потребляю» поле этого объекта, прежде чем сериализовать его, чтобы сэкономить место на диске.И прежде чем ты прыгнешь мне в горло из-за этого, я не могу объявить это поле transient, потому что я иногда включаю это поле в объект, но не в другие.

Имеет ли установка объекта значение nullлюбой эффект на GC?

Ответы [ 3 ]

4 голосов
/ 06 апреля 2011

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

Чтобы узнать, когда объект собирается сборщиком мусора, посмотрите на пакет java.lang.ref - хотя я могу честно сказать, что за 16 лет программирования на Java мне никогда не нужно было знатькогда объект собирают мусор.

Можете ли вы объяснить, почему вы думаете, что вам это нужно?

1 голос
/ 06 апреля 2011

Нет; все ссылки на этот объект должны быть потеряны / обнулены. На практике это то, о чем вам не следует беспокоиться.

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

0 голосов
/ 06 апреля 2011

Нет и нет.myObject = null; поможет, только если нет других ссылок на объект, и в большинстве случаев это излишне, потому что локальные объекты выходят из области видимости в конце каждого метода.

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

...