2014-03-30 53 views
0

我們遇到錯誤「java.lang.OutOfMemoryError:要求數組大小超過VM限制」中的日誌文件和其他過程中也出現此錯誤爲什麼其它過程仍然運行在應用程序encouters的OutOfMemoryError

  1. 後運行

    爲什麼其他進程在上述錯誤後也運行?

  2. 是否所有java.lang.OutOfMemoryError錯誤都會阻塞整個應用程序?

假設有10個線程,其中一個線程由於OutofMemory錯誤而失敗。在這種情況下將所有將被阻止的螺紋或其它9個線程將繼續該過程

實施例記錄器的消息:

example...(QuartzScheduler.java:2166) - Job (DEFAULT.jobLaunchStatusPoller threw an 
exception. org.quartz.SchedulerException: Job threw an unhandled exception. [See nested  
exception: java.lang.OutOfMemoryError: Requested array size exceeds VM limit] at 
org.quartz.core.JobRunShell.run(JobRunShell.java:210) at 
org.quartz.simpl.SimpleThreadPool$WorkerThread.run(SimpleThreadPool.java:546) Caused by: 
java.lang.OutOfMemoryError: Requested array size exceeds VM limit [Mar 17 13:32:24] 
[3578814] WARN [PollingScheduler_Worker-19] (JobExecutor.java:54) - Job Execution 
Started. 

感謝。

+0

「OutOfMemoryError」只是一個例外,儘管很少能成功處理。如果/當它漣漪到線程堆棧的底部時,將調用線程默認處理程序。該處理程序可能決定或不決定取消該過程的其餘部分。 –

回答

1

看看:Effects of uncaught exceptions on threads from Quartz's SimpleThreadPool

石英設置未捕獲的異常處理程序的線程,從而捕捉Throwable,進而重新填充它與新線程的線程池。

通常(沒有quarz或任何其他設置的UncaughtExceptionHandler),錯誤將傳播到默認處理程序,這將退出VM並打印堆棧跟蹤。所以你的情況:

  1. 見上面,只有失敗的線程被丟棄

  2. 石英,所有OutOfMemoryError s就以相同方式處理(如將所有其他錯誤),但是,其他大多數錯誤通常會讓虛擬機處於不一致的狀態。 「請求的數組大小超過VM限制」是罕見的錯誤之一,它們是完全可恢復的,因爲它們隻影響一個線程。

相關問題