2012-03-19 7 views
2

У меня есть попытка поймать и, наконец, блокировать это.Использование памяти памяти Java

Client client = new Client(); 
try { 
    ... 
} 
catch { 
    ... 
} 
finally { 
    client = null; 
} 

Я хотел бы спросить, если client = null необходимо уничтожить использование памяти для объекта клиента, если происходит исключение.

+1

№ простой как это. –

+0

@JoopEggen - Возникла бы проблема, если вы все равно это сделали (т. Е. Введите 'client = null;')? – Coffee

+0

@ delnan Кто бы это объяснил? И трудно выполнить поиск, если вы не знаете, что такое релевантные ключевые слова. – biziclop

ответ

3

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

+0

+1 для того, чтобы быть ближе всего к объяснению основополагающих рассуждений (rick.okelly говорит о ссылках на переменную, которая кажется как запутанная глупость). Бросьте в какой-нибудь дискуссию о ** достижимости **, и было бы еще лучше :) – delnan

4

Как только переменная client перестает быть доступной (то есть уже не имеет GC root), она имеет право на сбор мусора.

В вашем примере это выглядит так, как если бы client был недоступен, как только метод завершится (будь то из-за того, что выбрано исключение или «нормальный»), поэтому присвоение ему значения null не требуется.

1

Нет, сборщик мусора Java takes care of this.

Я бы наложил татуировку на лоб, поскольку это одна из сильных сторон Java по отношению к C/C++.

+0

«Самая большая точка продажи Java» - это глупо; многие языки имеют одинаково или аналогично хорошую сборку мусора, имеют больше возможностей и в целом легче использовать. C# и Python приходят на ум. – Flaise

+0

Тушь, я отредактирую это. благодаря ! – Coffee

+1

Пересмотренная версия просто смущает разработчиков C++ (по крайней мере, достойных тех, кто знает, использовать интеллектуальные указатели).Просто возьмите, что весь «GC - это лучшая вещь, так как нарезанный хлеб» - часть, ничего не способствует. – delnan

2

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

Есть много областей, кроме этих двух.

поэтому не нужно уничтожать объект. Вам нужно только уничтожить, когда используется какой-то ресурс, например File IO или Database connection.

Смежные вопросы