如果你看看开头的Node.js的documentation for domains它指出:为什么异常会导致Node.js中的资源泄漏?
通过的抛在JavaScript中是如何工作的本质,几乎从来没有以任何方式安全地“拿起你离开的地方” ,而不会泄露引用,或创建其他某种不明确的状态。
同样的代码示例它给在首节它说:
像疯了似的
虽然我们避免突然的重启过程中,我们都渗出资源,我想理解为什么会出现这种情况?什么资源在泄漏?他们建议您只使用域来捕获错误并安全地关闭进程。这是所有例外的问题,而不仅仅是在使用域时?在Javascript中抛出和捕获异常是一种不好的做法吗?我知道这是Python中的一种常见模式。
编辑
我可以理解为什么有可能是资源泄漏在非垃圾回收的语言,如果你抛出一个异常,因为那时的任何代码可能会运行清理对象将无法运行如果有异常抛出。
我可以用Javascript想象的唯一原因是如果抛出异常将异常存储引用引发到引发异常的范围(也可能是调用堆栈中的东西),从而引用周围,然后异常对象是保持在周围,永远不会清理干净。除非所引用的泄漏资源是引擎内部的资源。
UPDATE
我写了一个博客解释这个问题的答案会好一点吧。 Check it out
你介意觉得这个问题非常有用http://stackoverflow.com/问题/ 14301839/javascript-asynchronous-exception-handling-with-node-js – 2013-04-06 18:37:47
不幸的是,这个问题刚刚讨论了使用域来捕获异步异常。它根本没有提到内存泄漏。 – 2013-04-07 05:11:53
这就是为什么它是一个评论,而不是答案:)这是如何使域名尝试/捕捉更容易处理。至于这个问题,这是关于关闭泄漏。你抛出一个异常,但你有例如一个请求对象,它仍然在事件中有一个引用,并且这个事件引用了请求对象,而这两个对象并没有被垃圾回收。例如,如果你有一个MongoDB连接,因为引发异常你不关闭它,它可能隐含地保持打开状态。 – 2013-04-07 05:20:27