#javascript #node.js #memory-leaks #v8 #jit
#javascript #node.js #утечки памяти #v8 #jit
Вопрос:
Когда я запускаю bluebird’s promisify()
in setInterval()
, я обнаружил проблему с утечкой памяти. Существует проблема https://github.com/petkaantonov/bluebird/issues/1663 . Я сомневаюсь, что это потому, что «скомпилированный код» new Function()
не может быть собран gc of nodejs
. Итак, я запускаю следующий тест и записываю снимок кучи с помощью Chrome DevTools. С увеличением времени появляется все больше и больше «скомпилированного кода» new Function()
.
setInterval(() => {
const a = new Function('a', 'console.log(a)');
a('1');
}, 10);
Я хочу знать, почему Node.js gc не собирает «соответствующий код» new Function()
и является ли это ошибкой?
Ответ №1:
Как правило, сборщик мусора может собирать и собирает скомпилированный код, как и все остальное.
Имейте в виду, что системы сбора мусора не освобождают память сразу, когда объект выходит за пределы области видимости. В какой-то момент сборщик мусора снова запустится, определит недоступные объекты и освободит их память.
В данном конкретном случае похоже, что DevTools хранят дополнительные данные (предположительно, для целей отладки), что делает это похожим на утечку памяти — но только пока DevTools открыты. Я подал crbug.com/1141613 так что команда может взглянуть.
Комментарии:
1. О, это прекрасно 🙂