Если вы спрашиваете, что происходит с объектами, на которые ссылаются переменные в статических методах, то эти объекты становятся понятными для сборки мусора, когда они больше не находятся в области видимости.
Если вы говорите об объектах, на которые ссылаются статические поля, то они, проще говоря, не будут собираться до тех пор, пока для ссылок не будет установлено значение null.
Следующий пример может проиллюстрировать это лучше:
class Example
{
private static object field1 = new object();
public static void SomeMethod()
{
object variable1 = new object();
// ...
}
public static void Deref()
{
field1 = null;
}
}
Объект, на который ссылается field1 , будет создан при загрузке класса и останется корневым даже при создании и уничтожении объектов класса Example. Единственный способ собрать этот объект - это вызвать метод Deref (), который разыменует его, установив ссылку на null. (На самом деле, можно выгрузить классы, выгружая домен приложения, но это несколько сложнее, и вы не часто сталкиваетесь с этим.)
И наоборот, статический метод SomeMethod () создает объект и ссылается на него с помощью переменной variable1 . Этот объект доступен для сборки мусора, как только он выходит из области видимости (в конце метода). Практически, он может быть собран раньше, если остальная часть метода не ссылается на него.