| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Java: Общие вопросы > Java heap space и Граф |
| Автор: FewG 30.12.2011, 14:48 |
| Добрый День, есть такая проблема, при создании Графа в виде матрикса (Узлы -> int[], рёбра -> int[][]) с более 15к узов VM не хватает памяти и выкидывает ошибку: java.lang.OutOfMemoryError: Java heap space. Собственно каким образом можно импплементировать такой граф, какую структуру выбрать? |
| Автор: Stolzen 30.12.2011, 15:50 |
| В базе данных хранить можно и загружать оттуда в кэш значения кластерами. |
| Автор: dorogoyIV 30.12.2011, 15:51 |
| что такое 15к ? можно, конечно, попробовать дать больше ресурсов памяти: java -Xmx1024m [твоя прога] в джава нет структур. что ты использовал? просто некорректен вопрос, поэтому сложно ответить на него... уточни, поясни, ... |
| Автор: FewG 30.12.2011, 16:14 | ||||||
15 000 (пятьнадцать тысяч)
А как же 1D, 2D array; heaps и тд. тп? P.S. Вроде и так ясно -> имплементирую Граф с 15000-20000 узлами, VM говорит: "мол места нет". Значит мной выбраная "структура"
не подходит. |
| Автор: dorogoyIV 30.12.2011, 16:27 | ||
блин... вслух, по буквам произнеси!!! ладно, не обижайся, тут вообще не форум лэнгвистов... тут я опять тебя не понимаю... что имеется ввиду под словом "структура" ?
вот структура на С/C++, а ты про что? ну а пробовал добавить памяти? - -Xmx |
| Автор: FewG 30.12.2011, 17:40 | ||
http://ru.wikipedia.org/wiki/%D0%A1%D1%82%D1%80%D1%83%D0%BA%D1%82%D1%83%D1%80%D0%B0_%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D1%85 Отводил доп. память, не спасает. Ведь всё-таки 15000 в квадрате многовато будет, значит нужно искать другой подход реализации графа. |
| Автор: dorogoyIV 30.12.2011, 18:19 |
| да, мы тут помедетируем... к тому же, возможно телепаты вернуться из отпуска... (и все равно не понятно - 15к, это 15 Кб что ли?, тогда это 15 * 1024 = 15360 (никак не 15000 !!!)) - ну не могу я тебя понять!!! |
| Автор: FewG 30.12.2011, 21:17 | ||
15 000 Узлов Графа. На картинке их 6, у меня более 15 000. Ясно? |
| Автор: dorogoyIV 31.12.2011, 03:07 |
| ну 15000 это не страшно. может быть ты для каждого узла пишешь - new ... ? или прога заходит в бесконечную рекурсию или цикл... ? посмотри внимательно, попробуй оптимизировать код |
| Автор: Stolzen 31.12.2011, 05:23 |
| Кстати, 15к и правда не так много, год назад где-то на с++ писал программу, оперирующую на порядок большим количеством узлов - и не вылетала она от потери памяти. Правда данные обрабатывала несколько суток и неправильно Как сам граф хранится? В виде какой матрицы? Может лучше в виде списков ребер хранить? (И от самого графа ведь зависит! Разреженный он или нет, и прочее) |
| Автор: dorogoyIV 31.12.2011, 05:43 |
| windows дает в ваше распоряжение 4 Гб памяти. (как в линуксах, я, извините не знаю :( ) этой паматью можно по разному распорядиться... |
| Автор: Mirkes 1.1.2012, 20:31 |
| Если я правильно понял вопрос, то под "структурой" понимается хранение графа в виде массива вершин и матрици инциденций. Как верно заметил Stolzen эффективный способ хранения графа сильно зависит от разреженности. Недавно сам писал работу с графами и использовал следующую структуру данных: 1. Масссив вершин 2. двумерный массив для ребер. При этом для каждой вершины в соответсвующей строке двумерного массива хранился только список вершин, связанных с данной ребром. Такая структура данных для графа дает существенную экономию по памяти, если граф не близок к полносвязому (в последнем случае можно хранить список вершин, с которыми данная НЕ связяна ребром). Правда с такой структурой не удобно работать прирешении некоторых задач на графах. |