Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java: Общие вопросы > Почему такой маленький heap ?


Автор: zels 26.2.2011, 09:04
Запускаю задачу для работы с большими массивами (~30млн объектов)
Памяти хватает только на создание 8млн.
Максимальный heap -Xmx1110m, больше не может выделить.
Установлено 4гб ОЗУ и WindowsXP.

JVM последняя (1.6_24) от Oracle.

Мне кажется, раньше была JVM, которая использовала 2Gb ОЗУ, но я не помню, что за версия.


P.S для справки: на C# программа использовала 1700Мб и создала 28млн объектов.
 



Автор: XoJIoD 26.2.2011, 12:01
Для 64 разрядной java можно выделить больше памяти.

Автор: tonklor 26.2.2011, 13:19
Была аналогичная проблема. Вечерком распишу метод "лечения".

Автор: zels 26.2.2011, 14:14
Цитата(XoJIoD @ 26.2.2011,  12:01)
Для 64 разрядной java можно выделить больше памяти.

Установил 64-разрядную Java (в Windows 7), чтобы попробовать...

Ключ Xmx3500m позволил дойти до 20млн, причем после 15млн очень сильные тормоза.


Автор: COVD 26.2.2011, 18:05
Завтра вам понадобится 60 млн. Перспективней искать другое архитектурное решение, т.е. разбить данные на порции и обрабатывать параллельно на разных JVM. В grid'е. 

Автор: zels 26.2.2011, 18:41
На части я разбил, мне хватит.

Непонятно, почему Java ест памяти намного больше, чем C#, ведь хранимая информация одинакова.

Не хочу спорить Java vs C#, просто в данном случае C# оказался предпочтительнее.



Автор: Skipy 28.2.2011, 12:53
Пока Вы не привели код, невозможно сказать, что там не так. Ваши слова позволил дойти до 20млн, причем после 15млн очень сильные тормоза несколько не согласуются с принципами работы с массивами, где память выделяется единовременно и ее объем не меняется.

Автор: Temdegon 28.2.2011, 16:34
Цитата

Ваши слова позволил дойти до 20млн, причем после 15млн очень сильные тормоза несколько не согласуются с принципами работы с массивами, где память выделяется единовременно и ее объем не меняется. 

Почему это? выделяется массив под 20млн ссылок на объекты, единовременно. Но основной объем памяти будет тратиться именно на сами экземпляры классов, которые потом будут создаваться и укладываться в этот массив. Вроде все логично.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)