Модераторы: LSD, AntonSaburov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Хранение большого количества данных, Как защитить heap от переполнения. 
:(
    Опции темы
val
Дата 15.1.2007, 16:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Program developer
**


Профиль
Группа: Участник Клуба
Сообщений: 992
Регистрация: 14.1.2003
Где: г. Киев

Репутация: нет
Всего: 7



Привет, всем!
Моё Java-приложение в некоторых случаях должно обрабатывать довольно большие объемы данных. В результате иногда может возникать нехватка heap-памяти. Сейчас эту проблему я решаю JNI-вызовами, которые специально выделяет мне память на базе апишных функций Windows.  А вот можно ли как-то средствами самой Джавы захватывать большие куски памяти за пределами heap(a)?  


--------------------
Терпимость - величайшее благо человечества...
Ярчайший признак интеллекта – постоянно хорошее настроение…
PM MAIL ICQ   Вверх
LSD
Дата 15.1.2007, 18:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


Профиль
Группа: Модератор
Сообщений: 15718
Регистрация: 24.3.2004
Где: Dublin

Репутация: 210
Всего: 538



Код
FileInputStream in = new FileInputStream("temp-file");
MappedByteBuffer mappedByteBuffer = in.getChannel().map(FileChannel.MapMode.PRIVATE, 0, 1073741824L);



--------------------
Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it.
PM MAIL WWW   Вверх
val
Дата 15.1.2007, 18:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Program developer
**


Профиль
Группа: Участник Клуба
Сообщений: 992
Регистрация: 14.1.2003
Где: г. Киев

Репутация: нет
Всего: 7



LSD, а если не с файлами работать, большие куски данных по сети приходят?



--------------------
Терпимость - величайшее благо человечества...
Ярчайший признак интеллекта – постоянно хорошее настроение…
PM MAIL ICQ   Вверх
LSD
Дата 15.1.2007, 19:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


Профиль
Группа: Модератор
Сообщений: 15718
Регистрация: 24.3.2004
Где: Dublin

Репутация: 210
Всего: 538



Скыдывай их в файл, и работай по частям. За пределы кучи средствами Java не выбратся.


--------------------
Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it.
PM MAIL WWW   Вверх
val
Дата 16.1.2007, 10:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Program developer
**


Профиль
Группа: Участник Клуба
Сообщений: 992
Регистрация: 14.1.2003
Где: г. Киев

Репутация: нет
Всего: 7



Цитата

Скыдывай их в файл, и работай по частям. За пределы кучи средствами Java не выбратся. 


Попрорбовал, но производительность приложения упала практически на порядок. Остался при мнении, что JNI-вызовы с помощью которых захватываются участки физической памяти самое оптимальное решение, хотя и платформозависимое...  smile   


--------------------
Терпимость - величайшее благо человечества...
Ярчайший признак интеллекта – постоянно хорошее настроение…
PM MAIL ICQ   Вверх
LSD
Дата 16.1.2007, 12:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


Профиль
Группа: Модератор
Сообщений: 15718
Регистрация: 24.3.2004
Где: Dublin

Репутация: 210
Всего: 538



А почему нельзя просто выделить больше памяти JVM?


--------------------
Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it.
PM MAIL WWW   Вверх
w1nd
Дата 16.1.2007, 12:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Вертилятор
***


Профиль
Группа: Завсегдатай
Сообщений: 1077
Регистрация: 22.3.2006
Где: Москва

Репутация: 20
Всего: 54



Кстати, с файлом (memory mapped) интереснее - должно получиться съесть памяти больше, чем положено программе.


--------------------
user posted imageuser posted image
PM MAIL ICQ   Вверх
val
Дата 16.1.2007, 13:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Program developer
**


Профиль
Группа: Участник Клуба
Сообщений: 992
Регистрация: 14.1.2003
Где: г. Киев

Репутация: нет
Всего: 7



Мой Java-сервер получает, обрабатывает и перенаправляет данные в сети. В штатном режиме получение, обработка и перенаправление данных проходят практически одновременно. Но возможна ситуация, что канал получения значительно быстрее канала, куда идёт перенаправление данных или канал получатель временно не активен. Вот и приходится у себя где-то хранить полученные данные в ожидании, что целевой канал снова станет активным. Вот мы и решили захватывать физическую память нативными методами, чтобы в один прекрасный момент не получить heap memory overload.    

Цитата

А почему нельзя просто выделить больше памяти JVM? 


Потому что никогда не знаешь, какой объем памяти тебе понадобиться, а он может варьироваться от нескольких килобайт до гигабайта. А стартовать Java-машину с очень большим хипом не очень красиво...

Это сообщение отредактировал(а) val - 16.1.2007, 13:06


--------------------
Терпимость - величайшее благо человечества...
Ярчайший признак интеллекта – постоянно хорошее настроение…
PM MAIL ICQ   Вверх
LSD
Дата 16.1.2007, 13:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


Профиль
Группа: Модератор
Сообщений: 15718
Регистрация: 24.3.2004
Где: Dublin

Репутация: 210
Всего: 538



Цитата(val @  16.1.2007,  13:06 Найти цитируемый пост)
Потому что никогда не знаешь, какой объем памяти тебе понадобиться, а он может варьироваться от нескольких килобайт до гигабайта. А стартовать Java-машину с очень большим хипом не очень красиво...

Вообще-то можно указать, максимальный объем памяти, и это вовсе не значит что JVM сразу захватит столько памяти. Плюс если использовать не серверную JVM, а клиентскую, то JVM и отдавать память будет.


Цитата(val @  16.1.2007,  13:06 Найти цитируемый пост)
Мой Java-сервер получает, обрабатывает и перенаправляет данные в сети. В штатном режиме получение, обработка и перенаправление данных проходят практически одновременно. Но возможна ситуация, что канал получения значительно быстрее канала, куда идёт перенаправление данных или канал получатель временно не активен. Вот и приходится у себя где-то хранить полученные данные в ожидании, что целевой канал снова станет активным. Вот мы и решили захватывать физическую память нативными методами, чтобы в один прекрасный момент не получить heap memory overload.

Тогда тем более вам надо использовать диск для временного хранения данных.


--------------------
Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it.
PM MAIL WWW   Вверх
w1nd
Дата 16.1.2007, 13:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Вертилятор
***


Профиль
Группа: Завсегдатай
Сообщений: 1077
Регистрация: 22.3.2006
Где: Москва

Репутация: 20
Всего: 54



Цитата(val @  16.1.2007,  13:06 Найти цитируемый пост)
 А стартовать Java-машину с очень большим хипом не очень красиво...

Это почему же? Параметр Xmx определяет максимальный размер кучи.

Упс... уже ответили

Это сообщение отредактировал(а) w1nd - 16.1.2007, 13:18


--------------------
user posted imageuser posted image
PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
javastic
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux, javastic.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0511 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.