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:
- 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…
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
Thank you for visiting the Q&A section on Magenaut. Please note that all the answers may not help you solve the issue immediately. So please treat them as advisements. If you found the post helpful (or not), leave a comment & I’ll get back to you as soon as possible.
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).
See IPCNode code for reference counting example