powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Как обработать потенциальную нехватку памяти?
25 сообщений из 30, страница 1 из 2
Как обработать потенциальную нехватку памяти?
    #38677086
redwhite90
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
У меня следующая проблема:
Программа многопоточно парсит большие файлы. У меня есть подозрение, что возможна ситуация, что программа упадёт из-за нехватки какого-нить пермгена или чего-то подбного. Ибо в реальной жизни файлы могут быть ещё больше.

1. Возможно ли это как-то предотвратить? (средства профилактики)
2. Совсем плохая ситуация, если программа свалилась, перед этим правда часть распарсила, пользователь видит результат(частичный), смотрит, что выполнение закончилось и думает, что всё уже успешно закончилось. Как такое предотвратить? catch(Throwable) ?
...
Рейтинг: 0 / 0
Как обработать потенциальную нехватку памяти?
    #38677094
Фотография wadman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
redwhite901. Возможно ли это как-то предотвратить?
Возможно: загружать информацию разумными порциями.
...
Рейтинг: 0 / 0
Как обработать потенциальную нехватку памяти?
    #38677105
redwhite90
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
wadman,

как определить разумность порции в рантайме?
...
Рейтинг: 0 / 0
Как обработать потенциальную нехватку памяти?
    #38677106
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
redwhite90wadman,

как определить разумность порции в рантайме?
Посмотреть размеры кучи.
...
Рейтинг: 0 / 0
Как обработать потенциальную нехватку памяти?
    #38677214
Atum1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
1. Делать все через {Weak ,Soft, Phantom}Reference + ReferenceQueue
2. Отказаться от парсинга в Памяти , перейти на работу с файлами (Files java 7 итд)
...
Рейтинг: 0 / 0
Как обработать потенциальную нехватку памяти?
    #38677296
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если XML - открыть для себя, что кроме DOM, есть еще и SAX.

Прочитать про устройство памяти в Java. Пока перлы "упадёт из-за нехватки какого-нить пермгена " думаю смотреть в сторону reference бессмысленно. Ну IMHO soft reference может чем то и хорош, но вот документация как он чиститься GC полный отстой. Если в проекте наплодите soft reference, боюсь падать оно не перестанет, а вот отладить место падение будет сложнее.

Выделить больше памяти, что бы файл точно в память помещался. Большие файлы парсить в отдельной Java машине, что бы если и упадет, было не так жалко ))). А, вообще, зависит от специфика задачи, проекта и доступного оборудования.
...
Рейтинг: 0 / 0
Как обработать потенциальную нехватку памяти?
    #38677395
redwhite90
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Blazkowiczredwhite90wadman,

как определить разумность порции в рантайме?
Посмотреть размеры кучи.

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

непонятно с чем сравнить размер кучи, ведь sizeOf в java нет
...
Рейтинг: 0 / 0
Как обработать потенциальную нехватку памяти?
    #38677402
redwhite90
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Atum11. Делать все через {Weak ,Soft, Phantom}Reference + ReferenceQueue
оу, всегда знал о существовании этих слов, но никогда не видел как это пользуют ? покажете красочный пример?
Atum12. Отказаться от парсинга в Памяти , перейти на работу с файлами (Files java 7 итд)
я на 6 джаву завязан(

А вообще стало интересно где тогда парситься это всё будет?
...
Рейтинг: 0 / 0
Как обработать потенциальную нехватку памяти?
    #38677403
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а чем тебе "size of" поможет? сравнить с потреблением своей программы/алгоритма
...
Рейтинг: 0 / 0
Как обработать потенциальную нехватку памяти?
    #38677406
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
redwhite90...А вообще стало интересно где тогда парситься это всё будет?
Что значит парситься?

Банальный парсинг (например текстового файла), требует одного поля состояния парсера + 1-2 байта на текущей и пред. считанный символ. Зачем что-то большее? )))
...
Рейтинг: 0 / 0
Как обработать потенциальную нехватку памяти?
    #38677408
redwhite90
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Leonid Kudryavtsev,

Leonid KudryavtsevЕсли XML - открыть для себя, что кроме DOM, есть еще и SAX.
не XML и давно открыл)

Leonid KudryavtsevВыделить больше памяти, что бы файл точно в память помещался. Большие файлы парсить в отдельной Java машине, что бы если и упадет, было не так жалко ))). А, вообще, зависит от специфика задачи, проекта и доступного оборудования.

приложение должно быть универсальным. Файлы могут взяться откуда угодно. А парситься они должны единообразно. И программа сама должна следить, чтобы онане взяла на себя слишком много.
...
Рейтинг: 0 / 0
Как обработать потенциальную нехватку памяти?
    #38677411
redwhite90
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Leonid Kudryavtsevа чем тебе "size of" поможет? сравнить с потреблением своей программы/алгоритма
Ну смотрите, я так себе это представляю:

Я смотрю сколько "ресурсов" я трачу сейчас, смотрю сколько "ресурсов" свободно, смотрю сколько "ресурсов" надо чтобы начать обрабатывать новый файл.

Как каждое из этих трёх чисел получить?
...
Рейтинг: 0 / 0
Как обработать потенциальную нехватку памяти?
    #38677412
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
redwhite90...приложение должно быть универсальным. Файлы могут взяться откуда угодно. А парситься они должны единообразно. И программа сама должна следить, чтобы онане взяла на себя слишком много.
Какие файлы и что значит "парситься" ?

Если нужна изоляция по памяти, то на мой взгляд, только запускать 2-ую (5,10-ую JVM) и выполнять парсинг там. В любом другом случае, способа гарантированно изолировать кусок кода от ядра нет. Или я такого способа не знаю.

Мало того, при работе в выделенной JVM, вполне возможно, может быть и значительное ускорение приложения. Т.к. ряд задач парсящих файлы, не будут гадить в общую кучу. Соответственно и куча может быть меньше (компактнее, больше в кеше процессора поместиться) и GC будет опять таки работать быстрее.

IMHO & AFAIK
...
Рейтинг: 0 / 0
Как обработать потенциальную нехватку памяти?
    #38677419
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
redwhite90...Я смотрю сколько "ресурсов" я трачу сейчас, смотрю сколько "ресурсов" свободно, смотрю сколько "ресурсов" надо чтобы начать обрабатывать новый файл...
"трачу" это present contininue , а посмотреть это или past или даже past perfect ))). Сорри за мой английский.

Т.ч. в такой постановке вопроса - никак, в вопросе "падение падежей" ( C )
...
Рейтинг: 0 / 0
Как обработать потенциальную нехватку памяти?
    #38677420
redwhite90
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Leonid Kudryavtsevredwhite90...А вообще стало интересно где тогда парситься это всё будет?
Что значит парситься?

Банальный парсинг (например текстового файла), требует одного поля состояния парсера + 1-2 байта на текущей и пред. считанный символ. Зачем что-то большее? )))

мне нужно анализировать содержимое файла. У меня есть некоторые паттерны, которые я там ищу...


ммм....вообще да, логично.

Но что имелось ввиду
Atum1 Отказаться от парсинга в Памяти , перейти на работу с файлами (Files java 7 итд)
я не понимаю.
...
Рейтинг: 0 / 0
Как обработать потенциальную нехватку памяти?
    #38677425
redwhite90
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Leonid Kudryavtsevredwhite90...Я смотрю сколько "ресурсов" я трачу сейчас, смотрю сколько "ресурсов" свободно, смотрю сколько "ресурсов" надо чтобы начать обрабатывать новый файл...
"трачу" это present contininue , а посмотреть это или past или даже past perfect ))). Сорри за мой английский.

Т.ч. в такой постановке вопроса - никак, в вопросе "падение падежей" ( C )

Можно взять какие-то волюнтаристские запасы. Ну допустим у нас 500 единиц ресурсов свободно, предполагаем, что 300 мы можем использовать.
...
Рейтинг: 0 / 0
Как обработать потенциальную нехватку памяти?
    #38677431
redwhite90
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
http://stackoverflow.com/a/2015524/2674303

вот это те самые цифры, что мне нужны?

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
// Get current size of heap in bytes
long heapSize = Runtime.getRuntime().totalMemory(); 

// Get maximum size of heap in bytes. The heap cannot grow beyond this size.// Any attempt will result in an OutOfMemoryException.
long heapMaxSize = Runtime.getRuntime().maxMemory();

 // Get amount of free memory within the heap in bytes. This size will increase // after garbage collection and decrease as new objects are created.
long heapFreeSize = Runtime.getRuntime().freeMemory(); 
...
Рейтинг: 0 / 0
Как обработать потенциальную нехватку памяти?
    #38677451
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
redwhite90вот это те самые цифры, что мне нужны?

http://docs.oracle.com/javase/7/docs/api/java/lang/management/package-summary.html
Через JMX, возможно, лучше.
...
Рейтинг: 0 / 0
Как обработать потенциальную нехватку памяти?
    #38677465
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Зависит от задачи. Вашу задачу никто не знает. В "первом (втором, третьем и так далее) приближении" можно, но гарантий соответственно никаких.

1) Мы можем посмотреть, что сейчас 100 ресурсов свободно, а на деле, еще 100500 не почищенных GC свободного место. - сказали "облом", а на деле ресурсов полно.
2) Два потока: первый посмотреть, что 550 ресурсов свободно, запустился, второй посмотрел, 550 ресурсов свободно, запустился. Каждый потратил по 300 ресурсов и... - упали, а предположим, что еще и завалили ядро

И так далее

Или, работаем в предположении, что код написан _качественно_ и под JVM выделенно достаточно ресурсов. Или, что бы работать с гарантией, если файлы действительно большие и алгоритм _требует_ много памяти - запускать в отдельной JVM.

Но, для качественных алгоритмов, связи "размер памяти" -> "потребленная ОП память" быть не должно. IMHO & AFAIK.
...
Рейтинг: 0 / 0
Как обработать потенциальную нехватку памяти?
    #38677478
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Blazkowicz
Я бы для оценки:

1) брал бы размер еден спейс и умножал на кол-во сборок (минор) муссора - кол-во памяти засираемое алгоритмом в процессе работы
+
2) то, что после миннор GC осталось в памяти - кол-во памяти потребляемое на структуры

но мне кажется, что это не принесет счастья ТС и никак не решит задачу озаглавленную в Subj. IMHO & AFAIK
...
Рейтинг: 0 / 0
Как обработать потенциальную нехватку памяти?
    #38677506
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Leonid Kudryavtsev...связи "размер памяти" -> "потребленная ОП память" быть не должно. IMHO & AFAIK.

"размер файлы " -> "потребленная ОП память"...
...
Рейтинг: 0 / 0
Как обработать потенциальную нехватку памяти?
    #38677527
esy301s
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Хе, ща попробовал через трай-кетч вполне себе ловит OutOfMemoryError и не валится. Обрабатуйте исключение наздоровье, или я что-то не понял?

Ну и чтоб не было случаев частично обработанного может положение курсора где нибудь хранить, типа если для файла не равно его размеру то значит файл недопрочтен...
...
Рейтинг: 0 / 0
Как обработать потенциальную нехватку памяти?
    #38677602
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
И что делать, в этой обработке Out of memory ? Как она поможет.

Можно ключик java поставить и out of memory вообще никогда не будет )))
...
Рейтинг: 0 / 0
Как обработать потенциальную нехватку памяти?
    #38677613
esy301s
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ну например уполовинить требуемый буфер. Или по невозможности обработать пометить файл как необрабатываемый и продолжить со следующим файлом.

Подозреваю что я не совсем понял вопрос ибо если так просто б все было вопроса б не было :) сори если так.
...
Рейтинг: 0 / 0
Как обработать потенциальную нехватку памяти?
    #38677664
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
esy301sНу например....
Усложним вопрос. Два потока (два куска кода):
1. WebLogic отвечает на HTTP запрос.
2. Пользовательская обработка. Тоже в нескольких потоках.

Пользовательский процесс занял всю память. Когда работает поток WebLogic'а он пытается выделить буффер под HTTP запрос, запускается GC и падает с OutOfMemory.

1. Куда вставлять try ... catch..., если даже такую обработку вставили, как понять "кто виноват" и "что половинить"
2. Где гарантия, что для работы обработчика ошибок, осталось достаточно памяти ))) (можно попытаться настроить).
3. OutOfMemory не свидетельствует (как в C), что памяти нет. Оно лишь говорит, что GC подозревает, что памяти может не быть и дальше проводить garbage не разумно. Можно дать GC ключик и этой ошибки не будет. Будет по посинения мусор собирать и не выебы..ться. Т.ч. отсутствие ошибки, это не показатель, что все хорошо (настраивается).

Я не спорю, что сделать можно. Но надо ли.

Лично я бы, смотрел в сторону:
1. Нормальный алгоритм. Где требования к ресурсам не связаны (слабо связаны) с размером файла.
2. Если корреляция есть - ограничение на размер обрабатываемого файла
3. Если хочется полностью независимости по памяти - запускать дочернею JVM.

IMHO & AFAIK
...
Рейтинг: 0 / 0
25 сообщений из 30, страница 1 из 2
Форумы / Java [игнор отключен] [закрыт для гостей] / Как обработать потенциальную нехватку памяти?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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