JVM: небезопасно продолжать работу после неудачного выделения памяти? - PullRequest
3 голосов
/ 27 мая 2011

У меня есть процесс, который использует библиотеку для выполнения шага, требующего времени и памяти, который иногда занимает слишком много памяти и выдает ошибку выделения при большом запросе. В этом случае разумно принять сбой и продолжить обработку, поэтому мое решение состоит в том, чтобы аннулировать мою ссылку на этот инструмент и создать новую для продолжения обработки после следующего ввода.

Другие люди в моей группе оспаривают эту стратегию, утверждая, что как только память в JVM становится настолько тесной, что распределение происходит неудачно, JVM находится в подозрительном состоянии: никаких реальных доказательств, только FUD. С другой стороны, я могу только индуктивно утверждать, что я еще не видел побочных эффектов (я еще не видел черных лебедей).

В: Абсолютно небезопасно и верным продолжать работу с JVM, которая вызвала сбой выделения памяти?

Ответы [ 2 ]

3 голосов
/ 27 мая 2011

Нет, это не абсолютно небезопасно. Хотя, очевидно, гораздо лучше избегать этого, если вы можете, потому что кто знает, в каком неопределенном состоянии будут находиться ваши структуры данных после того, как вы начнете не выделять память.

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

Главное, что вы тщательно оцениваете свое приложение и хорошо представляете себе ловушки, с которыми вы можете столкнуться. Это и попытайтесь перезапустить JVM как можно скорее после сбоя. ;)

1 голос
/ 27 мая 2011

Когда у вас заканчивается память, другим потокам также может не хватать памяти, и они могут не справиться с этим так изящно. Вы можете обнаружить, что можете продолжать большую часть времени, но лучше не исчерпывать память.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...