开发者

Node.js' garbage collector

开发者 https://www.devze.com 2023-02-17 02:08 出处:网络
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)

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 obj开发者_如何学Goects. 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


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

0

精彩评论

暂无评论...
验证码 换一张
取 消

关注公众号