2014-08-29 22 views
1

如果我無法避免在Node.js應用程序中使用「new」關鍵字,那麼如何有效地標記垃圾收集對象?我創建一個相當高的水平構造一個新的對象(由是,我的意思是new myObj()實際上創建了幾個new Something()對象更深的下跌的過程中如何在JavaScript中標記「新」對象進行垃圾收集(Node.js)

比方說,我的構造看起來有點像下面這樣:。

function User(name, age) { 
    this.something = x; 
    this.greet = function() { return "hello"; }; 
    this.somethingElse = new OtherThing(); 
    return this; 
} 

function createUserAndGreet(name, age) { 
    var user1 = new User(name, age); 
    user1.greet(); 

    // now I don't need user1 anymore 
} 

(順便說一句,我知道這個代碼很爛,但我認爲它橫跨得到我的觀點)

然後我另一個函數中創建一個新的

我得到他打招呼後,我怎能擺脫他,釋放他佔領的記憶?

因此,如果我在完成他之後將user1設置爲null並且user1 = null;,他是否會永遠消失,GC會來清理他?這是否也會刪除創建的new OtherThing()?或者還有什麼我需要做的?我聽說使用new臭名昭着的內存泄漏,所以我只想知道是否有解決方法。

回答

3

GC負責處理未引用的所有內容。您的代碼是「GC兼容」的,因爲在致createUserAndGreet()之後,所有引用都被銷燬。

你必須關心的唯一事情就是GC直接附加到窗口對象(全局變量),這些將永遠不會被收集。你的兩個變量在createUserAndGreet()範圍內,當函數調用結束時,這個範圍被銷燬。

+0

好的很好:)謝謝 – 2014-08-29 13:03:40