Node.js' garbage collector
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 obj开发者_如何学Goects. 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
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 https://github.com/Frans-Willem/IPCNode
精彩评论