繁体   English   中英

可以使用try ... catch机制来避免内存崩溃吗?

[英]Can the try…catch mechanism be used to avoid memory crashes?

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

假设我们期待内存泄漏的程序部分保持在try ... catch块下,如果程序崩溃(即内存泄漏),则catch语句执行。 所以我们可以防止我们的程序崩溃。

可能吗 ? 如果是,如何或如果没有,为什么不呢?

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

我们的想法是,您在知道如何处理它的地方捕获它,然后您有机会执行代码以响应异常。

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

并且内存泄漏和崩溃不是一回事,程序因内存泄漏而崩溃是罕见的,除非它实际耗尽内存。 事实之后,内存泄漏很少“可以修复”。 解决内存泄漏的正确且通常唯一的方法是首先避免它发生。

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

如果你正在寻找一些关于如何避免程序崩溃的全能建议,这是我的建议:

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

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

在内存不足的情况下,我不相信任何进程系统都能做正确的事情。 我们有一些系统在发生PermGen异常时完全锁定,需要kill -9来摆脱。

如果您希望系统自我纠正,请将其包装在脚本或监视健康状况,心跳或诊断页面或任何有意义的系统中。 如果您没有收到健康指示,请将其杀死(必要时很难)并重新启动它。

最重要的是使用测试和验证来包括监视内存(和磁盘)的使用情况,并确保您真正了解系统的行为和配置是否正确,以免发生。

重新启动解决方案是一个不好的选择,因为您必须测试并确定您可以随时终止您的应用程序并确信它可以正确重新启动,这甚至可能更加困难。

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

try catch用于处理Objective-C异常,即通过执行@throw语句引发的异常。 由空指针解引用引起的分段错误由操作系统生成,并且是Unix信号的示例,并且只能由OS级系统调用(例如sigaction(2)系统调用)捕获和处理。 即便如此,您可以做的唯一理智是立即终止程序,因为您可能有一个损坏的堆或堆栈。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM