2010-09-29 41 views
8

我有一個程序有時會拋出OOME,我知道我可以設置JVM選項中的一個標誌,並且每當某個錯誤/異常出現時(例如OOME),它就會調用我寫的腳本。 該腳本會給用戶一個通知,並會用不同的參數調用該程序,所以它不會再次獲得OOME。如何捕捉JVM中的OutOfMemoryError,並在腳本被捕獲時運行腳本?

沒有人知道如何設置此標誌?我需要設置什麼JVM選項? 我在網上隨處看,找不到答案。

請幫幫我! 謝謝, 埃

+1

在命令提示符處鍵入'java -X'。您將獲得所有擴展選項的列表。可能有幫助。 – 2010-09-29 11:29:32

回答

-3

我發現了一個建議,在forum:趕上像直接在應用程序的OOME(主要的,假設你是單線程的),併爲此在catch處理:

catch (OutOfMemoryError not_again) { 
    System.gc(); 
    System.runFinalization(); 
    System.gc(); 
    System.out.println("Your error message"); 
} 

清理堆可能釋放只是足夠的內存來產生一個錯誤messag在臨終前。

+0

謝謝,但應用程序非常稀疏,我不想在裏面捕捉它,我更喜歡從JVM本身調用.dat文件 – Aye 2010-09-29 11:45:26

+8

人們會認爲JVM會在投擲之前嘗試幾輪GC OOME本身;這並不能保證真的能做很多事情。 – 2010-09-29 12:10:48