2010-09-10 103 views
1

我真的有兴趣知道,是否有可能使用try ... catch机制,我们可以避免我们的应用程序的内存崩溃...?可以使用try ... catch机制来避免内存崩溃吗?

让我们说,我们期待内存泄漏的几率程序部分下try ... catch块保存,如果出现程序崩溃(即内存泄漏),那么catch语句执行。所以我们可以防止我们的程序崩溃。

可能吗?如果是,如何或者如果不是,为什么不?

+0

*“内存崩溃”*是什么意思?内存泄漏与崩溃有什么关系? – 2010-09-10 13:17:57

回答

4

try/catch块可以捕获异常并阻止它在callstack中向上传播。

的想法去,你抓住它在哪里,你知道如何处理它,然后你有机会响应例外执行代码的地方。

这不是一个神奇的解决方案,可以防止任何事情,这正是我上面所说的。你对例外做什么是重要的。

而且内存泄漏和崩溃是不一样的东西,这是罕见的程序崩溃是由于内存泄漏,除非它实际运行的内存。内存泄漏很难在事后“修复”。修正内存泄漏的正确方法,通常是唯一的方法,就是避免它首先发生。

另外,是的,在某种程度上,您可以通过添加try/catch块来防止程序崩溃,但是您唯一能成功的方式是从用户隐藏崩溃,然后让程序继续运行。 “崩溃”并不总是可以忽略的,或者说,它们通常是不安全的。

如果你正在寻找如何避免程序崩溃一些包罗万象的建议,这是我的建议是:

  • 编写一个程序,工作正常

我认为我们需要更多地了解您遇到的问题,或者您需要发布更清晰的问题。

0

我不会相信任何处理系统在内存不足的情况下做正确的事情。当PermGen异常发生时,我们有完全锁定的系统,并且需要kill -9来消除。

如果你想让系统自我纠正,将它包装在一个脚本或监视健康,心脏跳动或诊断页或任何有意义的系统。如果您没有收到任何健康指示,请将其杀死(如有必要,请尽快)并重新启动。

最重要的是使用的测试和验证,包括监控内存(和磁盘)的使用,并确保你真正了解你的系统的行为,并适当配置,使它不会发生。

重启的解决方案是一个贫穷的替代,因为你再要测试和确定,你可以在任何时间杀死你的应用程序,并有信心,才能正确重新启动,甚至可能会更加困难。

0

如果你问“我可以用try catch捕捉分段错误”,答案是否定的。

try catch用于处理Objective-C异常,即那些通过执行@throw声明引发的。由例如由于空指针解引用由操作系统生成,并且是Unix信号的示例,并且只能由OS级系统调用捕获和处理,例如, sigaction(2)系统调用。即使这样,唯一可以做的事情就是立即终止程序,因为你可能有一个损坏的堆或堆栈。