我有一個程序有時會拋出OOME,我知道我可以設置JVM選項中的一個標誌,並且每當某個錯誤/異常出現時(例如OOME),它就會調用我寫的腳本。 該腳本會給用戶一個通知,並會用不同的參數調用該程序,所以它不會再次獲得OOME。如何捕捉JVM中的OutOfMemoryError,並在腳本被捕獲時運行腳本?
沒有人知道如何設置此標誌?我需要設置什麼JVM選項? 我在網上隨處看,找不到答案。
請幫幫我! 謝謝, 埃
我有一個程序有時會拋出OOME,我知道我可以設置JVM選項中的一個標誌,並且每當某個錯誤/異常出現時(例如OOME),它就會調用我寫的腳本。 該腳本會給用戶一個通知,並會用不同的參數調用該程序,所以它不會再次獲得OOME。如何捕捉JVM中的OutOfMemoryError,並在腳本被捕獲時運行腳本?
沒有人知道如何設置此標誌?我需要設置什麼JVM選項? 我在網上隨處看,找不到答案。
請幫幫我! 謝謝, 埃
-XX:OnOutOfMemoryError = 「CMD ARGS; CMD ARGS」
來源:http://www.oracle.com/technetwork/java/javase/tech/vmoptions-jsp-140102.html#DebuggingOptions
哇,那個看起來很有用,我現在就去看看。謝謝:) – Aye 2010-09-29 11:45:55
我發現了一個建議,在forum:趕上像直接在應用程序的OOME(主要的,假設你是單線程的),併爲此在catch處理:
catch (OutOfMemoryError not_again) {
System.gc();
System.runFinalization();
System.gc();
System.out.println("Your error message");
}
清理堆可能釋放只是足夠的內存來產生一個錯誤messag在臨終前。
謝謝,但應用程序非常稀疏,我不想在裏面捕捉它,我更喜歡從JVM本身調用.dat文件 – Aye 2010-09-29 11:45:26
人們會認爲JVM會在投擲之前嘗試幾輪GC OOME本身;這並不能保證真的能做很多事情。 – 2010-09-29 12:10:48
在命令提示符處鍵入'java -X'。您將獲得所有擴展選項的列表。可能有幫助。 – 2010-09-29 11:29:32