5
請考慮我有一個主線程在新線程中執行新的Runnable。現在,當新線程正在執行時,Java虛擬機耗盡內存並拋出OutOfMemoryError。單獨的Java線程中的OutOfMemoryError
會發生什麼?目標線程是否停止?主線會繼續嗎?當新線程崩潰時,虛擬機會從內存中回收內存並讓執行繼續嗎?
請考慮我有一個主線程在新線程中執行新的Runnable。現在,當新線程正在執行時,Java虛擬機耗盡內存並拋出OutOfMemoryError。單獨的Java線程中的OutOfMemoryError
會發生什麼?目標線程是否停止?主線會繼續嗎?當新線程崩潰時,虛擬機會從內存中回收內存並讓執行繼續嗎?
其中一個線程將在new
的分配部分期間拋出OutOfMemoryError
。爲避免抖動,錯誤發生後可能會有大量的內存空閒。所以其他線程可以繼續進行,並且不可能在一段時間內進行OOME。
如果OOME沒有被捕獲,那麼線程將退出並調用未捕獲的異常處理程序。退出時,線程和關聯的對象將像往常一樣可用於垃圾回收(不會被其他方式引用)。