Когда объекты Javascript отбираются из памяти? - PullRequest
0 голосов
/ 24 июня 2011

Я видел похожие темы в этой QnA, но мой конкретный сценарий такой, как показано ниже.

function render(canvas) {
    var renderer = new Renderer(canvas);
    renderer.render();
}

Renderer.render() рисует некоторые вещи на <canvas>. Теперь дело в том, что это работает, так что это означает, что экземпляр renderer не является сборщиком мусора. Это подводит меня к моему вопросу - когда renderer будет собирать мусор? Обратите внимание, что этот объект не упоминается нигде, кроме как его собственными методами.

Мне бы хотелось, чтобы этот объект собирался мусором после завершения рендеринга. Есть ли способ заставить это?

Ответы [ 3 ]

1 голос
/ 24 июня 2011

Подробности сборки мусора не определяются спецификацией ECMAScript, поэтому реализации различаются в разных браузерах, но обычно в JavaScript объект становится доступным для сборки мусора, когда на него нет оставшихся ссылок.

В нашем примере это будет, когда функция, в которой объявлено renderer, вернется.

1 голос
/ 24 июня 2011

в v8. Нет ссылок на объект, и движок javascript становится бездействующим.

0 голосов
/ 24 июня 2011

Ваш тайм-аут в render() содержит ссылку на функцию, которая, в свою очередь, содержит ссылку на средство визуализации.После истечения времени ожидания и при условии, что оно не устанавливает больше времени ожидания, ссылка на функцию отсутствует, а ссылка на средство визуализации отсутствует, поэтому сборщик мусора становится понятным.

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