В Java как собирать мусор в массиве объектов? - PullRequest
5 голосов
/ 09 марта 2012

Когда на массив объектов больше не ссылаются, объекты в этом массиве тоже собираются мусором? (при условии, что переменные не ссылаются на элементы)

На этой странице http://java.sys -con.com / node / 37613 это говорит - «Самая большая опасность - поместить объект в коллекцию и забыть удалить его. Память, используемая этим объектом, никогда не будет возвращена».

Если вы уверены, что аннулировали ссылки, почему эта память будет невостребованной?

Спасибо

Ответы [ 4 ]

4 голосов
/ 09 марта 2012

Когда на массив объектов больше не ссылаются, объекты в этом массиве тоже собираются мусором?(при условии, что переменные не ссылаются на элементы)

Да.

"Самая большая опасность - поместить объект в коллекцию и забыть удалить его. Память, используемаяэтот объект никогда не будет возвращен. "

Это когда вы держите ссылку на коллекцию.Например, если у вас есть Map, в котором вы вводите значение ключа, а затем забываете удалить его, он остается там навсегда.Подумайте о сеансах http, если вы используете что-то в ServerContext или что-то подобное в начале запроса, используя идентификатор сессии в качестве ключа, но не можете удалить его в конце обработки запроса.

2 голосов
/ 09 марта 2012

Для первого вопроса ответ да, безусловно: объекты внутри массива, на который нет ссылок, и никакие другие ссылки не собирают мусор.

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

1 голос
/ 09 марта 2012

Вообще говоря, все, на что нет ссылок, является сборщиком мусора. Так что да, эти объекты будут собирать мусор.

Также обратите внимание, что:

  1. Массив не является коллекцией.
  2. Я думаю, что человек, который написал это, был уверен, что вы помните все места, где вы ссылаетесь на объект, так что если Вы намереваетесь удалить это, это удалено (и нет никакого затягивания ссылки на него).
1 голос
/ 09 марта 2012

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

...