2009-10-08 4 views
5

Учтите, что у меня есть главный Thread, который запускает новый Runnable в новом потоке. Теперь, когда новый поток выполняется, в виртуальной машине Java нет памяти и выбрасывается OutOfMemoryError.OutOfMemoryError в отдельном потоке Java

Что происходит? Прерывает ли целевой поток? Продолжит ли основной поток? Когда новый поток выйдет из строя, VM вернет память из него и продолжит выполнение?

ответ

7

Одна из нитей будет выбрасывать OutOfMemoryError во время выделения части new. Чтобы избежать перебоев, возможно, после ошибки будет освобожден значительный объем свободной памяти. Таким образом, другие потоки могут продолжаться, и вряд ли они будут OOME в течение определенного периода времени.

Если OOME не пойман, поток выйдет и вызовет обработчик неперехваченного исключения. При выходе поток и связанные с ним объекты будут доступны для сбора мусора, как обычно (без ссылки другими способами).

Смежные вопросы