[英]Java program terminates unexpectedly without any error message
我編寫了一個需要處理數千個文本文件的java程序(都需要加載到內存中)。 它可以使用多達123個輸入文件,但是當我運行它來處理大約5000個文件時,它會在路中間意外終止,而不會給出任何錯誤消息/異常。 誰能給我一些可能出錯的線索?
我在具有2GB RAM的Mac OS Leopard上使用jdk1.6。
鑒於它是您的程序,我建議您執行以下操作:
首先,更改main
方法,以便在try / catch塊中完成所有操作,該塊報告所有未捕獲的異常; 例如:
public static void main(String[] arghhhhh) {
try {
...
} catch (Throwable ex) {
System.err.println("Uncaught exception - " + ex.getMessage());
ex.printStackTrace(System.err);
}
}
其次,尋找可以通過捕獲它們而不報告它們來“擠壓”意外異常的任何地方。
第三,尋找你可以靜默調用System.exit()
任何地方。 這也可能發生在圖書館......如果你使用的是寫得不好的。
如果這些措施沒有給你答案,試着弄清楚應用程序是如何退出的
看起來你正在OutofmemoryError
。
如果是這種情況嘗試增加堆內存大小。
java -Xms<initial heap size> -Xmx<maximum heap size>
你是否同時打開文件? 如果一次加載太多文件,則可能內存不足。 如果文件足夠大,則可能只有一個文件打開時內存不足。 此外,確保在完成文件后關閉文件。
檢查是否有任何未正確記錄異常的try / catch塊。
它很可能是OutofmemoryError。 確保未重定向控制台。
主要有兩個原因。
要處理這些情況,請考慮執行以下步驟:
確保處理起始Java堆棧框架中的所有異常,即Main-method:
嘗試{..code} catch(Throwable t){t.printStackTrace}
確保您可以控制stdout和stderr所在的位置。 您可以以編程方式將這些設置為具體文件:
System.setOut(new PrintStream(“output.txt”)); System.setErr(new PrintStream(“err.txt”));
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.