| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > 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 | ||
Установил 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млн ссылок на объекты, единовременно. Но основной объем памяти будет тратиться именно на сами экземпляры классов, которые потом будут создаваться и укладываться в этот массив. Вроде все логично. |