powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Glassfish java.lang.OutOfMemoryError: Java heap space при getResultList()
11 сообщений из 11, страница 1 из 1
Glassfish java.lang.OutOfMemoryError: Java heap space при getResultList()
    #37964028
Niky4000
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Есть запрос с кучей join'ов в query_string:
Код: sql
1.
2.
Query q = em.createQuery(query_string);
List<Object[]> resList = q.getResultList(); // Тут валится java.lang.OutOfMemoryError!


Что с этим можно сделать?
Есть всякие JVM Options типа:
-Xmx512m
-XX:MaxPermSize=192m
-XX:PermSize=64m
Наверное, какие-то из них отвечают за ограничение памяти для JVM.
А можно ли как-то снять совсем ограничения памяти?
...
Рейтинг: 0 / 0
Glassfish java.lang.OutOfMemoryError: Java heap space при getResultList()
    #37964050
забыл ник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Это не по-пацански снимать ограничения. Суть процесса такова - да временно можно увеличить хип теми параметрами что вы привели, но потом надо снять хип-дамп, проанализировать его, попытаться оптимизировать и определить "рабочую" конфигурацию памяти. Допустим если определили что под рабочей нагрузкой вам надо 500МБ выставите кучу в 800-900 и тп. И так далее, если невозможно оптимизировать или дешевле купить новый сервер - тоже вариант, но это не отменяет постоянного анализа потребляемой памяти и прямых рук.
...
Рейтинг: 0 / 0
Glassfish java.lang.OutOfMemoryError: Java heap space при getResultList()
    #37964053
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Запустите под профайлером.

-XX:MaxPermSize=192m и -XX:PermSize=64m отвечают за PermGen space, у вас четко сказано OutOfMemoryError: Java heap

Кроме максимального объема кучи -Xmx512m можно указать стартовый -Xms512m. При параллельно сборке бывает что GC не успевает очищать и расширять кучу а CPU занят созданием новых объектов, вот и падает ещё до наполнения кучи. Это легко увидеть в профайлере.

Сколько там реально возвращается данных? Для чего вам столько? Для UI можно использовать пейджинг.

Есть параметр -XX:+AggressiveHeap, который постарается занять всю доступную память под Java и кучу.
...
Рейтинг: 0 / 0
Glassfish java.lang.OutOfMemoryError: Java heap space при getResultList()
    #37964063
Niky4000
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вот как бы и проблема, что в теории данных может быть очень много и расширение - это полумера, а не решение. Вот если бы совсем снять... Но, наверное, это невозможно, да?
...
Рейтинг: 0 / 0
Glassfish java.lang.OutOfMemoryError: Java heap space при getResultList()
    #37964070
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Niky4000Вот как бы и проблема, что в теории данных может быть очень много и расширение - это полумера, а не решение. Вот если бы совсем снять... Но, наверное, это невозможно, да?
ScrollableResults
...
Рейтинг: 0 / 0
Glassfish java.lang.OutOfMemoryError: Java heap space при getResultList()
    #37964079
Niky4000
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Поясню.
Ну, допустим, мне очень нужно сделать select всех записей некой таблички, а она очень тяжёлая, например 10Гбайт. Если я её буду засовывать в память сервера целиком, то мне никакого сервера и никакой памяти не хватит.
...
Рейтинг: 0 / 0
Glassfish java.lang.OutOfMemoryError: Java heap space при getResultList()
    #37964083
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Niky4000Поясню.
Ну, допустим, мне очень нужно сделать select всех записей некой таблички, а она очень тяжёлая, например 10Гбайт. Если я её буду засовывать в память сервера целиком, то мне никакого сервера и никакой памяти не хватит.
org.hibernate.ScrollableResults
...
Рейтинг: 0 / 0
Glassfish java.lang.OutOfMemoryError: Java heap space при getResultList()
    #37964099
Niky4000
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ну, примерно, понял:
Что-то типа:
q.getResultList().subList(fromIndex, toIndex);
Так чтобы не засовывать всё сразу в память.
Или q.getResultList().iterator() какой-нибудь.
То есть надо чтобы клиент в цикле подтягивал данные и динамически их отображал.
...
Рейтинг: 0 / 0
Glassfish java.lang.OutOfMemoryError: Java heap space при getResultList()
    #37964101
Niky4000
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Просто там не hibernate, а eclipselink.
...
Рейтинг: 0 / 0
Glassfish java.lang.OutOfMemoryError: Java heap space при getResultList()
    #37964178
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Niky4000Просто там не hibernate, а eclipselink.
Ааа...
Там вроде тоже есть аналоги:
http://wiki.eclipse.org/Using_Advanced_Query_API_%28ELUG%29
...
Рейтинг: 0 / 0
Glassfish java.lang.OutOfMemoryError: Java heap space при getResultList()
    #37964243
Niky4000
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Мне кажется вот так проще всего и без заморочек:
Просто демка:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
            q.setMaxResults(10);
            List<Object[]> resList = q.getResultList();
            q.setFirstResult(10);
            List<Object[]> resList2 = q.getResultList();
            q.setFirstResult(20);
            List<Object[]> resList3 = q.getResultList();
            q.setFirstResult(30);
            List<Object[]> resList4 = q.getResultList();



В результате генерируется что-то типа:
Код: sql
1.
2.
FINE: SELECT * FROM (SELECT /*+ FIRST_ROWS */ a.*, ROWNUM rnum  FROM (SELECT ...... FROM ..... WHERE ..... ORDER BY .....) a WHERE ROWNUM <= ?) WHERE rnum > ?
	bind => [...., 30, 20]
...
Рейтинг: 0 / 0
11 сообщений из 11, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / Glassfish java.lang.OutOfMemoryError: Java heap space при getResultList()
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]