It absolutely should be GC'd. To demonstrate (on node again), this uses about 10MB of RSS, because obj.a cannot be GC'd.
j = function() { var obj = { a: new Array(1000000).join('*'), b: 5 }; return obj; }(); setTimeout(function() {}, 30000);
Edit: I think your understanding of GC might be coming from R's generational GC, which is a heuristic and quite different from V8's incremental GC: http://blog.chromium.org/2011/11/game-changer-for-interactiv...
Generational can be actually viewed as a variation of incremental GC.
It absolutely should be GC'd. To demonstrate (on node again), this uses about 10MB of RSS, because obj.a cannot be GC'd.
If you change "return obj" to "return obj.b", RSS is about 9kb.Edit: I think your understanding of GC might be coming from R's generational GC, which is a heuristic and quite different from V8's incremental GC: http://blog.chromium.org/2011/11/game-changer-for-interactiv...