Not enough memory

от автора

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

<cut/>

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

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

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

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

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


ссылка на оригинал статьи https://habr.com/ru/post/646337/


Комментарии

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *