Node.js 'сборщик мусора - PullRequest
       15

Node.js 'сборщик мусора

7 голосов
/ 16 марта 2011

Я узнал из этой темы Сборка мусора с помощью node.js , что node.js использует GC поколений.

Я обычно использую циклические ссылки на объекты (обе из которых я удаляю / гарантирую, в конце концов, выхожу из области видимости) и хотел бы знать, хорошо ли с ними работает node.js. Так, например. если это было сделано с помощью ссылки. считая, что возникнет проблема, я хотел бы знать, насколько хорош этот узел.

Некоторые сценарии использования:

  1. Для каждого http-запроса я создаю setTimeout с лямбдой, которая потенциально имеет ссылки на объекты области видимости. Объект области действия также имеет ссылку на объект тайм-аута и т. Д.

  2. Для каждого пользовательского сеанса у меня есть указатель (все еще занимающийся программированием на C) ссылки на объекты запроса http, которые также имеют ссылки на объект сеанса и т. Д. Объекты запроса часто удаляется, но объект сеанса отсутствует.

Редактировать: я спрашиваю из-за этой ссылки, которую я нашел в Интернете http://lifecs.likai.org/2010/02/how-generational-garbage-collector.html

Ответы [ 2 ]

10 голосов
/ 17 марта 2011

Как вы упомянули, NodeJS использует GC поколения ... в частности v8 . И, следовательно, он НЕ выполняет подсчет ссылок типа GC. Вместо этого он выполняет полный разметочный тип GC.

Так что, пока вы избавляетесь от всех ссылок на набор объектов (даже если они циклически указывают друг на друга), они должны собирать мусор в какой-то момент.

Это не значит, что вам не нужно заботиться о ГК. Если у вас очень активный сервер NodeJS, сборщик мусора будет очень усердно работать, чтобы очистить ваш мусор, особенно если у вас много объектов «среднего срока службы» (то есть недолговечных или долгоживущих).

1 голос
/ 18 мая 2011

См. Код IPCNode для примера подсчета ссылок https://github.com/Frans-Willem/IPCNode

...