2011-12-09 29 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对象很大,因为它可能包含一个电影或类似的大型媒体文件。在这种情况下可以分解物体吗? –