Удаление строки из памяти

88
11 мая 2021, 14:50
  1. Есть страница, содержимое которой обновляется по AJAX.
  2. При каждом обновлении по AJAX, на страницу приходит очень большая строка с Javascript-кодом.
  3. Затем этот код выполняется через eval() (проект достаточно старый, так что там реализовано именно так, плюс все переменные объявляются только через var).

При каждом обновлении страницы по AJAX в память добавляется новая строка (та, которая выполняется через eval()). Таким образом, каждое обновление страницы отъедает около 800 КБ оперативной памяти, т.е. возникает утечка памяти.

Почему так происходит, установить пока не удаётся. Возможно, что при выполнении JS-кода через eval(), строка остаётся в оперативной памяти. Как видно на скриншоте, Distance у таких строк равен нулю, значит, такие строки находятся на корневом уровне и какие-либо объекты на них не ссылаются.

Возможно ли каким-то образом выявить, почему эти строки остаются в оперативной памяти, раз на них никто не ссылаются? И можно ли их удалить из оперативной памяти без обновления страницы стандартным способом? Я буду признателен совершенно любой информации, которая поможет в решении этого вопроса.

Answer 1

Помогло решение с очисткой строк. Вот статья на Хабре: "Нужно ли чистить строки в JavaScript?".

Конкретно в моём случае подошёл следующий вариант:

//Очищаем строку после substr(), чтобы она не хранила ссылку на родителя
str = str.split('').join('');
READ ALSO
Ошибка с константной

Ошибка с константной

У меня есть структура, которая хранит событие и флаг является оно последним или нет

93
Комбинация директив для openmp

Комбинация директив для openmp

К примеру у меня есть некий цикл для распаралеливания:

80
SFML, технический вопрос про белый квадрат

SFML, технический вопрос про белый квадрат

Рассмотрим следующий код:

101
Парсинг QByteArray

Парсинг QByteArray

Есть контейнер, содержащий последовательность байт:

94