Javascript - таймеры сборщика мусора? - PullRequest
2 голосов
/ 21 ноября 2011

Есть идеи по таймеру сборщика мусора в javascript? Предположим, что я запускаю скрипт ниже, он будет функционировать, и связанная переменная области видимости перейдет для сбора мусора ровно через 100мс? Или какой-то запас?

Я прочитал одну ветку о сборке мусора в stackoverflow, но у меня все еще есть этот вопрос. Ниже мои вопросы?

  1. Запускается ли какой-либо SYSTEM TIMER для задачи сбора мусора?
  2. Если нет, основано ли это на СОБЫТИИ ?, значит, если ссылки больше нет, мусор Коллектор восстановит память МГНОВЕННО.

    function call_me() {
    //calculate elapsed_time - code not given
    
               if(elapsed_time <100)
               {
                setTimeout(call_me,25);
               }
              else{
               final_call();
              }
    }
    
    call_me();
    

Ответы [ 2 ]

7 голосов
/ 21 ноября 2011

Каждый пользовательский агент по-разному выполняет сборку мусора.Все пользовательские агенты используют метод mark-and-sweep при периодическом повторении, поэтому «мгновенно» в этом нет;это произойдет, когда это произойдет.

Каждый агент имеет разные пороги и механизмы для определения, когда GC делает проход.Он не обязательно управляется событиями (возможно, вы можете сказать, что он ориентирован на тестирование, инициируется событиями) и, конечно, не основан на таймере.

Функция, которая выходит из области видимости, мгновенно имеет право на сборку мусора, но на самом деле неясно, когда это произойдет.

Это действительно то, о чем, с точки зрения разработчика, вы не собираетесь думать.Нет никакого способа остановить или запустить GC, или нет никаких признаков того, что это вообще произошло.Проверьте about:memory в Firefox для некоторых интересных мелочей (и там есть несколько сомнительных кнопок, чтобы "управлять" GC).Вот и все, что вы собираетесь получить, поскольку это скрыто, и эти данные недоступны для сценариев.

3 голосов
/ 21 ноября 2011

Сборщик мусора недетерминирован.
Мусор будет собираться через некоторое время после того, как он станет мусором.

Объект закрытия, переданный setTimeout, станет мусором после выполнения.

Все остальное зависит от реализации.

...