如果你看看開頭的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