Не хватает памяти, какие-либо методы для динамической утилизации ненужных узлов дерева? - PullRequest
0 голосов
/ 17 июня 2011

Я использую алгоритм, который генерирует огромное дерево, результат наименьшего был получен с 2 069 073 узлами и занял 3 гигабайта памяти.

Но это не сработает!

У меня вопрос: есть ли хорошие методы или практики для динамической переработки ненужных узлов при работе?

РЕДАКТИРОВАТЬ: «Я использую алгоритм многопроцессорного планирования с 2 компьютерами и 10 заданиями на каждом компьютере.»

Ответы [ 4 ]

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

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

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

Другая возможность состоит в том, что где-то в вашем коде есть утечка памяти другого типа.

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

Пожалуйста, будьте точнее, как вам нужно.

Что значит «перерабатывать»?Пока все эти узлы тесно связаны и не могут собирать мусор, они, конечно, не будут GCed.

Если какая-то часть вашего дерева «одноразовая», т.е. больше не нужна, вы должны удалить этисоединения и / или могут использовать существующие объекты для связи с другими частями дерева и заполнения новыми данными.

2 голосов
/ 17 июня 2011

Как только больше нет доступных ссылок на данный узел, он может быть подвергнут сборке мусора. В редких случаях может иметь смысл запускать сборку мусора вручную, например System.gc(), но обычно это не является необходимым, поскольку GC все равно происходит периодически.

Что вы считаете ненужными узлами? Если вы никогда не будете посещать / нуждаться в них, просто удалите if из дерева и позвольте GC вернуть память ...

Какие данные вы храните в каждом узле? 3Gb мне кажется много ...

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

Ну, java - это язык для сбора мусора, поэтому в этом нет необходимости. Этот сайт содержит очень полезное объяснение сбора мусора.Согласно статье, установка ненужных переменных в null позволит им собирать мусор.

Из любопытства, что вы делаете, что сгенерировало 2 миллиона узлов ??

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