2011-12-09 32 views
0

我正在製作一個應用程序,用戶可能會遇到OutOfMemoryError;現在我想找到一種方法,通過這種方式可以通知用戶該程序遇到OutOfMemoryError,因此他/她可以採取相應措施。 (例如,用更大的堆空間等重新啓動程序)Java - 如何處理OutOfMemoryError?

如何「捕捉」錯誤,以便通知用戶?

+4

很酷。你有什麼問題? –

+0

一旦你得到那個異常,做任何事情都不是太晚了嗎? – muratgu

+0

@muratgu「這取決於」。如果玩火,你會燃燒自己嗎? :) - 另外,對於這些事情,「* Error *」比「* Exception *」更合適。 – 2011-12-09 22:08:51

回答

5

良好的用戶體驗的第一個教訓之一是不要求用戶做比需要的更多的工作。

這意味着您的想法是「通知用戶,讓他們可以重新啓動」是糟糕的設計,應該避免。

取而代之,請評估您的應用程序並確定爲什麼它耗盡內存。數據段是否可以轉儲到存儲文件中,而不用於釋放內存?是否有某種形式的效率可以通過更好的設計模式,數據表示或算法進行修正?

不要對問題做出反應,做好預防措施。如果OutOfMemoryError是不可避免的,應用程序應該有一種在崩潰之前保存狀態的方法。

閱讀一些文章的進一步思路:http://www.javaperformancetuning.com/news/qotm036.shtml

+0

我正在處理的程序接收一個對象(來自網絡上的其他計算機),這個對象有時可能非常大;但它必須經歷記憶。你認爲將最大堆空間設置爲8GB以確保所有內容都被覆蓋是可行的嗎? –

+0

@SamanthaCatania,您可以在64位操作系統和jvm上將堆設置爲8GB。您應該評估對象的最大尺寸並相應地調整堆的大小。你能不能通過你的界面來限制尺寸?爲什麼對象很大,可以分成幾部分?或懶加載? – aishwarya

+0

@aishwarya對象很大,因爲它可能包含一個電影或類似的大型媒體文件。在這種情況下可以分解物體嗎? –