Это может помочь выяснить, что самой платформы GC вы просите о - JVM, CLR, Lisp и т.д. Это сказал:
Во-первых, чтобы сделать шаг назад, некоторые локальные переменные обычно выделяются в стеке. Однако специфика может варьироваться в зависимости от языка. Чтобы взять C# в качестве примера, в стек хранятся только локальные Value Types и параметры метода. Так, в C#, foo
будет выделено на стеке:
public function bar() {
int foo = 2;
...
}
В качестве альтернативы, динамически выделенные переменные используют память из кучи. Это должно быть интуитивно понятным, поскольку в противном случае стек должен динамически расти каждый раз, когда вызывается new
. Кроме того, это означало бы, что такие переменные могут использоваться только как локальные локальные функции, которые их распределяют, что, конечно, не так, потому что мы можем иметь (например) переменные-члены класса. Таким образом, чтобы взять другой пример из C#, в следующем случае result
выделяется в куче:
public class MyInt
{
public int MyValue;
}
...
MyInt result = new MyInt();
result.MyValue = foo + 40;
...
Теперь с этим фоном в виду, память на кучного является сборщиком мусора. Память в стеке не нуждается в GC, так как память будет возвращена, когда текущая функция вернется. На высоком уровне алгоритм GC работает, отслеживая все объекты, которые динамически выделяются в куче. После выделения через new
объект будет отслеживаться GC и собираться, когда он больше не находится в области видимости, и больше нет ссылок на него.
Вы спрашиваете о конкретной сборщике платформы/мусора? Пожалуйста, отредактируйте свои теги и/или вопрос, чтобы быть более конкретными. – Jay
Это вообще ... Говоря со ссылкой на Википедию: http://en.wikipedia.org/wiki/Garbage_collection_%28computer_science%29 –