Проблемы с памятью Java при удалении узлов из дерева - PullRequest
1 голос
/ 23 июня 2011

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

Мой вопрос - как насчет дерева, где каждый узел имеет ссылки на своих детей, а также ссылку на родителя.Если я удалю узел посередине (неконечный узел), это вызовет утечку памяти, так как это будет ссылаться на его детей, и они будут ссылаться на него?Так что, если бы я хотел удалить поддерево, мне пришлось бы удалить все узлы в нем снизу вверх?

Ответы [ 3 ]

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

Вы должны прочитать о понятии достижимости .Это определено в javadocs, в описании пакета java.lang.ref .

Если объект не является сильно доступным для какого-либо потока, он может быть использован для сборки мусора.

Объекты, которые сильно достижимы потоком T:

  • объекты, на которые ссылаются локальные переменные в стеке вызовов T,
  • объекты, на которые ссылаются статические полялюбые классы и
  • объекты (строго) , на которые ссылаются сильно достижимые объекты.

Если вы удаляете узел из описываемого вами дерева (просто удаляяссылка на родительский узел на дочерний узел), и нет никаких оставшихся ссылок на часть дерева под удаленным узлом, тогда эти объекты не достижимы.Даже если они образуют какой-то цикл, JVM достаточно умен, чтобы определить, что эти объекты не достижимы (то есть они ссылаются друг на друга, но ни один из них не может быть достигнут любым кодом).Поэтому они имеют право на сборку мусора.

1 голос
/ 23 июня 2011

Вы можете удалить начальный узел и удалить ссылку на этот узел в его родительском узле.

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

Чтобы удалить поддерево, вам просто нужно удалить ссылку на него в его родительском.Пока никакие другие ссылки на него не хранятся или его дочерние элементы , он будет собирать мусор.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...