Pull to refresh

Not enough memory

Reading time1 min
Views9K

Поэтому пост крайне краткий.

Развивал наш централизованный обработчик ошибок, думал, что делать с сабж, ведь при нехватке памяти поведение программы становится не предсказуемым. И родилась ИДЕЯ. Думаю, я не первый, но раньше такого решения не встречал. И так...

Что делать? Продолжать обработку ошибок, формирование протокола и т.д. - не вариант, это все может не отработать, даже так: почти наверняка не отработает. Хочется вернуть программу в рабочее состояние. А что, если высвободить не нужную память? Только где ее взять?

- Чтобы продать что-то не нужное, нужно сначала купить что-то не нужное.

Вот и решение, при старте программы выделяем небольшой, но достаточный (эмпирическая оценка) блок памяти. Мусорный, никак и ничем не используемый. В обработчике ошибок, первым делом проверяем тип ошибки, если это OutOfMemoryException (или как он называется в вашем языке), освобождаем буфер, и как минимум продолжаем обработку ошибки, возможно даже и восстанавливаем работоспособность программы.

Хорошо бы еще, в какой-то момент, заново разместить аварийный блок, но это уже сложно формализуемо.

Tags:
Hubs:
Total votes 54: ↑12 and ↓42-29
Comments90

Articles