![]() |
Модераторы: LSD, AntonSaburov |
![]() ![]() ![]() |
|
CHEM_Eugene |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 73 Регистрация: 12.2.2008 Репутация: нет Всего: нет |
Вообще мне нужно реализовать структуру известную как гиперкуб.
Что она из себя представляет - набор переменных, каждая из которых имеет конечный домен значений. Например: Гиперкуб из двух измерений (две переменные - v1 и r1): [v1] = {000, 001, ... 111} [r1] = {v1, v2, v3} комбинация значений переменных гиперкуба дает целое число, например: [000][v2] -> 10 [001][v3] -> 500 Я попытался реализовать подобную структуру в виде HashMap<String, Integer>, где ключом выступает суррогатный ключ типа "000-v2", "001-v3" и т.д. В итоге в структуре получается (размер домена переменной v1)*(размер домена переменной r1) строк. И все бы хорошо, но на количестве в миллион строк, программа вылетает с Java Heap Memory exception Возможно - это не самая лучшая реализация подобной структуры... Подскажите - как можно было бы хранить данные более оптимально в моём случае! Я так понимаю мне бы подошел многомерный ассоциативный массив, к тому же он должен быть динамическим. Можете посоветовать что-то подобное? И вообще, кто-нибудь сталкивался с решением подобной задачи? |
|||
|
||||
COVD |
|
|||
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1655 Регистрация: 26.7.2005 Репутация: 17 Всего: 43 |
Возможно имеет смысл использовать grid, параллельные вычисления, если ресурсов одного компьютера недостаточно.
Если недостаточно только памяти, то Terracotta предлагает BigMemory - доступная память как бы расширяется за счет того, что обьекты памяти сериализуются вне кучи. Вообще, любая cache система (например, ehcache) , где обьекты сохраняются на диск, может быть настроена, чтобы функционировать как динамический Map, т.е. в памяти всегда будет только часть обьектов. Но это медленнее. Это сообщение отредактировал(а) COVD - 16.3.2011, 13:31 |
|||
|
||||
CHEM_Eugene |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 73 Регистрация: 12.2.2008 Репутация: нет Всего: нет |
COVD, я не уверен, что не достаточно одного компьютера. BigMemory - коммерческое решение, мне не подойдет.
Может быть все же подойдет что-то java-нативное ? Ведь 1 млн. int-ов по идее должен убираться в памяти... |
|||
|
||||
techmax |
|
|||
Новичок Профиль Группа: Участник Сообщений: 45 Регистрация: 5.9.2007 Где: Красноярск Репутация: 2 Всего: 2 |
А памяти сколько выдели для JVM? по умолчанию довольно мало выделяется.
Это сообщение отредактировал(а) techmax - 16.3.2011, 16:55 |
|||
|
||||
CHEM_Eugene |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 73 Регистрация: 12.2.2008 Репутация: нет Всего: нет |
||||
|
||||
COVD |
|
||||
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1655 Регистрация: 26.7.2005 Репутация: 17 Всего: 43 |
Действительно, по умолчанию-то максимальный размер памяти 64М. Может просто увеличить и вопрос решен? Надо в строке запуска приложения указать начальную и максимальную память :
Запросите максимально, 1500М. Сколько на самом деле программа получила и сколько свободно, можно замерить и вывести в консоль из программы
Это сообщение отредактировал(а) COVD - 16.3.2011, 17:25 |
||||
|
|||||
CHEM_Eugene |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 73 Регистрация: 12.2.2008 Репутация: нет Всего: нет |
Проблему с памятью решил, расширив ее, но увы, самым ресурсоемким оказался перебор 4 млн значений... Придется что-то менять в постановке задачи
|
|||
|
||||
math64 |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2505 Регистрация: 12.4.2007 Репутация: 8 Всего: 72 |
Integer занимает намного больше памяти, чем int, лучше пользоваться обычными массивами.
|
|||
|
||||
![]() ![]() ![]() |
Правила форума "Java" | |
|
Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux, javastic. |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Java: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |