2009-10-08 10 views
5

Należy pamiętać, że mam główny wątek, który wykonuje nowy tryb Runnable w nowym wątku. Teraz, gdy nowy wątek jest wykonywany, w maszynie wirtualnej Java zabraknie pamięci i wygeneruje OutOfMemoryError.Wystąpienie OutOfMemoryError w osobnym wątku Java

Co się dzieje? Czy wątek docelowy się zatrzymuje? Czy wątek główny będzie kontynuowany? Kiedy nowy wątek ulegnie awarii, czy VM odzyska pamięć i pozwoli kontynuować wykonywanie?

Odpowiedz

7

Jeden z wątków rzuci OutOfMemoryError podczas przydzielania części new. Aby uniknąć rzucania, prawdopodobnie pojawi się znaczna ilość wolnej pamięci po zgłoszeniu błędu. Tak więc inne wątki mogą trwać i jest mało prawdopodobne, aby OOME przez pewien czas.

Jeśli OOME nie zostanie przechwycone, wątek zostanie zamknięty i zostanie wywołany nieprzechwycony menedżer wyjątków. Po wyjściu wątek i związane z nim obiekty będą dostępne do zwykłego zbierania śmieci (z zastrzeżeniem braku odniesienia w inny sposób).