Удалить / освободить узел связанного списка в Java.Предложение пожалуйста - PullRequest
0 голосов
/ 25 июня 2011

Все, Если бы я написал функцию для удаления узла (учитывая headNode и данные в качестве входных параметров) из связанных списков в Java. Я нашел бы узел, который имеет "node.data = data", и удалил бы его, указав его предыдущий узел на его следующий узел * ^. Мой вопрос: нужно ли указывать узлу «быть удаленным» на ноль? освободить память? или GC позаботится об объектах, к которым больше нет доступа в куче.

* ^: скажем, A-> B-> C-> D, если B.data = data, то сделать A-> C. B-> Null необходим?

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

Ответы [ 3 ]

6 голосов
/ 25 июня 2011

Если вы хотите удалить узел B, вам просто нужно, чтобы A указывал на C. Сборщик мусора позаботится о ваших узлах B, поскольку на него не останется никаких ссылок.

Следующеецитата: http://javarevisited.blogspot.com/2011/04/garbage-collection-in-java.html

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

Как правило, объект получает право на сборку мусора в Java в следующих случаях:

1) Все ссылки на этот объект явно установлены на ноль, например, object = null

2) Объект создается внутриблок и ссылка выходят из области действия после того, как элемент управления выйдет из этого блока.

3) Родительскому объекту присваивается значение null, если объект содержит ссылку на другой объект и когда вы устанавливаете ссылку на контейнерный объект null, дочерний или содержащийся объект автоматически становитсяправо на сборку мусора.

4) Если объект имеет только живые ссылки через WeakHashMap, он будет иметь право на сборку мусора.

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

Как все говорили, вам не нужно устанавливать его в ноль.Я просто хочу добавить, что у меня был похожий вопрос, который раньше не был очевидным.Если у вас есть двусвязный список, где каждый узел ссылается на предыдущий и следующий узел, например, ABCD, и вы удаляете CD, так что у вас остается AB.Вам также не нужно беспокоиться о C или D, даже если у них обоих есть ссылка на них (с другой).По-видимому, GC достаточно умен, чтобы позаботиться и об этом случае

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

Нет, вам не нужно устанавливать B на null. Сборщик мусора Java освободит память для любого объекта, который больше недоступен.

...