Куча состоит из двух основных сегментов, нового пространства и старого пространства. Новое пространство - это место, где происходят новые распределения; Здесь можно быстро собирать мусор, и его размер составляет ~ 1-8 МБ. Объекты, живущие в Новом Пространстве, называются Молодым Поколением. Старое Пространство, где продвигаются объекты, которые выжили в коллекционере в Новом Пространстве - они называются Старым Поколением. Распределение в старом пространстве быстрое, однако сбор дорогой, поэтому он выполняется редко.
Вы должны понимать, что мало кто думает, например:
1 - Сборщик мусора строит список «корней». Корни обычно являются глобальными переменными, ссылки на которые хранятся в коде. В JavaScript объект «окно» является примером глобальной переменной, которая может выступать в роли корня. Объект window всегда присутствует, поэтому сборщик мусора может считать его и все его дочерние элементы всегда присутствующими (т.е. не мусором).
2 - Все корни проверяются и помечаются как активные (т.е. не мусор). Все дети также проверяются рекурсивно. Все, что может быть достигнуто из корня, не считается мусором.
3 - Все фрагменты памяти, не помеченные как активные, теперь можно считать мусором. Сборщик теперь может освободить эту память и вернуть ее в ОС.
Итак, о ваших вопросах:
From what I understand is neither of the variables will ever be cleaned by Garbage collector because they are treated as global variables.
Might sound like a trivial question but finding memory leaks is like finding a needle in a haystack
Вы правы.