Хорошего паттерна нет, OOM - неприятное исключение, которое может ударить в любой момент.Что делает его почти асинхронным исключением.Единственные шансы на его обработку - это когда ваш код структурирован так, чтобы выделять большие объемы памяти одновременно.Таким образом, у вас будут некоторые шансы отступить и раскрутить состояние программы, как будто ничего не произошло.
Вам необходимо спроектировать программу, чтобы ей никогда не требовалось выделять более половины всей доступной виртуальной памяти, один гигабайтна 32-битной машине.Драконы живут за пределами этого количества, ваша программа не сможет выделить 90 МБ или меньше, даже если есть еще 500 МБ неиспользованной виртуальной памяти.Проблема, вызванная фрагментацией адресного пространства.Если вы обычно пересекаете этот порог, вам необходимо переключиться на 64-разрядную операционную систему.