9

I have learnt from this thread garbage collection with node.js that node.js uses a generational GC.

I routinely use cyclic object references (both of which I delete/ensure go out of scope eventually) and would like to know if node.js handles them well. So for eg. if it was done using ref. counting, there would be a problem, so I would like to know how good node is at this.

Some usage scenarios:

  1. For every http request, I create a setTimeout with a lambda which potentially has references to scope objects. The scope object also has a reference to the timeout object, etc...

  2. For every user session, I have a pointer (still doing C programming) reference to the http request objects which also have references to the session object, etc... The request objects are deleted often, but the session object is not.

Edit: I ask because of this link that I found online http://lifecs.likai.org/2010/02/how-generational-garbage-collector.html

Community
  • 1
  • 1
dhruvbird
  • 6,061
  • 6
  • 34
  • 39

2 Answers2

11

As you mentioned, NodeJS uses a generational GC... specifically v8. And therefore, it does NOT do reference counting type GC. Instead, it does a full mark-and-sweep type GC.

So as long as you get rid of all references to a set of objects (even if they cyclic-ly point to one another), they should get garbage collected at some point.

That doesn't mean you shouldn't care about the GC. If you have a very active NodeJS server, the garbage collector will be working really hard to cleanup your garbage, especially if you have lots of "medium-life-span" objects (i.e. not short or long lived).

Amir
  • 4,131
  • 26
  • 36
  • Thanks. Do you know whether the node.js (v8) GC runs in another thread or on the same thread (as the js execution)? Do you have links for the same that I can look up? – dhruvbird Mar 17 '11 at 05:05
  • Same thread. It's a stop-the-world generational GC... but so are most others. There's some info [here](http://code.google.com/apis/v8/embed.html#handles), but it's probably not useful for you. If you are worried about something, you might want to first look at solutions people use in .NET or Java, they will be similar in terms of the GC. And you can always ask specific questions on stackoverflow :) – Amir Mar 17 '11 at 05:23
1

See IPCNode code for reference counting example https://github.com/Frans-Willem/IPCNode

net.me
  • 11
  • 1