Распределение памяти, используемой объектами Javascript - PullRequest
5 голосов
/ 15 мая 2009

Должен ли я самостоятельно освободить выделенную память, или есть какой-то сборщик мусора?

Можно ли использовать следующий код в JavaScript?

function fillArray()
{
  var c = new Array;
  c.push(3);
  c.push(2);
  return c;
}

var arr = fillArray();
var d = arr.pop()

спасибо

Ответы [ 3 ]

8 голосов
/ 15 мая 2009

Цитируется из Руководства Apple по кодированию JavaScript :

Использовать операторы удаления. Всякий раз, когда вам создать объект, используя новый Скажите, соедините это с удалением заявление. Это гарантирует, что все память, связанная с объектом, в том числе имя его свойства, является доступно для сбора мусора. оператор удаления обсуждается больше в «Освобождение объектов».

Это может означать, что вы используете команду delete, чтобы позволить сборщику мусора освободить память, выделенную для вашего Array, когда вы закончите ее использовать. Стоит отметить, что оператор delete удаляет только ссылку, она отличается от поведения в C / C ++, где нет сборки мусора и delete немедленно освобождает память.

3 голосов
/ 15 мая 2009

Переменные arr и d будут существовать как глобальные переменные и будут существовать до тех пор, пока они не будут собраны сборщиком мусора.

Переменные будут установлены как свойства глобального объекта, то есть window в среде браузера, но, поскольку они объявлены с var, , они не будут удаляться из глобального объекта.

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

2 голосов
/ 25 июня 2015

Управление памятью в JavaScript происходит автоматически и имеется сборщик мусора (GC).

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Memory_Management

Вы не можете явно удалить переменные d и arr, но вы можете удалить ссылки на их значения, задав для переменных другое значение, например null, чтобы GC мог удалить их из памяти. 1009 *

arr = null;
d = null;

Обратите внимание, что ключевое слово delete удаляет только свойства объекта.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...