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

2 Answers 2

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).

Sign up to request clarification or add additional context in comments.

2 Comments

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?
Same thread. It's a stop-the-world generational GC... but so are most others. There's some info here, 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 :)
1

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

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.