Насколько я знаю, двигатель V8 не
делать любую сборку мусора.
V8 имеет мощный и интеллектуальный сборщик мусора в сборке.
Ваша основная проблема не в понимании того, как замыкания поддерживают ссылку на контекст и контекст внешних функций. Это означает, что есть разные способы создания циклических ссылок или других переменных, которые просто очищают , а не .
Это потому, что ваш код неоднозначен и компилятор не может определить, безопасен ли он для сбора мусора.
Способ заставить GC собирать данные - обнулить ваши переменные.
function(foo, cb) {
var bigObject = new BigObject();
doFoo(foo).on("change", function(e) {
if (e.type === bigObject.type) {
cb();
// bigObject = null;
}
});
}
Как v8 узнает, безопасно ли собирать мусор с большого объекта, когда он находится в обработчике событий? Это не так, вам нужно сказать, что он больше не используется, установив переменную в null.
Различные статьи для чтения: