Размер кучи Js медленно увеличивается.
Это не обязательно утечка памяти.Это происходит, так как большинство движков используют сборщик мусора «остановить мир», что означает, что переменные останутся в памяти, хотя они могут уже быть собраны, а затем в какой-то момент включается GC, останавливает исполняемый в настоящий момент JS, проверяет все ссылкии освобождает память, на которую больше не ссылаются, а затем продолжает выполнение (это делается так, поскольку JS очень динамичен, вы не можете указать, что переменная, выходящая из области видимости, полностью разыменована, если вы проверяете все переменные сразу, вы знаете,наверняка).
Однако это делает сборку мусора дорогостоящей операцией.Поэтому GC пытается включить как можно реже, что означает, что он срабатывает, только если требуется память (поскольку она заполнена).
Поэтому у вас не обязательно есть утечка памяти (и яне вижу ни одного в коде).Наблюдайте за кучей в течение более длительного промежутка времени и подождите несколько циклов gc или запустите их вручную (тогда выглядит как пила), затем проверьте, увеличивается ли общий график.Если это так, у вас есть утечка памяти, поскольку есть элементы, которые выживают при сборе мусора, они протекают.
Есть ли способ узнать, где именно происходит утечка памяти?
Используя большинство отладчиков, вы можете создать «снимок» текущего состояния памяти.Возьмите две из них, одну до и после сборки мусора, затем сравните их, чтобы выяснить, что именно утечка, и обычно это можно отследить до кода, который его пропускает.