Место где я создаю XML ветку, и место где я пытаюсь найти Child (или например всех Child), это разные функции и даже разные модули. Код приведенный в вопросе это синтетический пример.
@korobochkin , попробуйте удалить из начального примера объявление метода someMethod. Т.е. оставить в объекте только длинную строку. Результат - утечки больше нет. С первого взгляда эта функция не имеет никакого значения в коде, но фишка в том, что при ее создании в нее передается та же область видимости (scope), что и в unused. В свою очередь в unused мы передаем область видимости с замыканием на старый ненужный нам объект. Таким образом и выстраивается каскад, который хорошо продемонстрирован в ответе Ильи.
Да, я действительно был лучшего мнения о сборщике мусора, а точнее о механизме создания scope.
Обидно, что даже V8 не смог увидеть этого обмана. Мне кажется здесь неплохо смотрелась бы низкоуровневая оптимизация, в которой хром вообще не создавал бы функцию unused.
Спасибо большое за ответ Илья =)
Спасибо Вам большое за ответ. В проекте я использую Nan и в общем-то этого хватает для удобного чтения кода, но думаю ссылка на v8-convert будет очень полезна в плане правильной работы с V8. Я обязательно изучу ее. Честно говоря я удивлен насколько маленькое сообщество у V8.