Почему в C# не собирается мусор статических полей? ⇐ C#
Почему в C# не собирается мусор статических полей?
В книге «C#12 в двух словах» написано:
В куче также хранятся статические поля. В отличие от объектов, размещенных в куче (которые можно собирать мусором), они живут до завершения процесса.
Однако, если мы не будем использовать статическое поле позже в коде, я не понимаю, почему сборщик мусора не освободит пространство, которое он использовал в куче?
Думаю, мой вопрос будет легче понять с помощью примера:
с использованием системы; публичный класс MyClass { // Статическое поле public static int Counter = 0; публичный МойКласс() { МойКласс.Счетчик++; } публичная недействительность MyMethod() { Console.WriteLine("МойМетод"); } } Программа общественного класса { public static void Main(string[] args) { Console.WriteLine(MyClass.Counter); MyClass myInstance = новый MyClass(); мойЭкземпляр.МойМетод(); Console.WriteLine(MyClass.Counter); // Начиная с этой строки, MyClass не будет использоваться, объект MyClass, на который ссылается myInstance // поэтому теперь можно собирать мусор. // Однако MyClass.Counter не будет собирать мусор, поскольку это статическое поле?! // Статическое поле может быть «объектом большего размера», чем просто целое число, и оно будет // плохо не собирать мусор, верно? целое число1 = 10; целое число2 = 20; целое число = число1 + число2; Console.WriteLine($"Сумма {number1} и {number2} равна {sum}."); } }
В книге «C#12 в двух словах» написано:
В куче также хранятся статические поля. В отличие от объектов, размещенных в куче (которые можно собирать мусором), они живут до завершения процесса.
Однако, если мы не будем использовать статическое поле позже в коде, я не понимаю, почему сборщик мусора не освободит пространство, которое он использовал в куче?
Думаю, мой вопрос будет легче понять с помощью примера:
с использованием системы; публичный класс MyClass { // Статическое поле public static int Counter = 0; публичный МойКласс() { МойКласс.Счетчик++; } публичная недействительность MyMethod() { Console.WriteLine("МойМетод"); } } Программа общественного класса { public static void Main(string[] args) { Console.WriteLine(MyClass.Counter); MyClass myInstance = новый MyClass(); мойЭкземпляр.МойМетод(); Console.WriteLine(MyClass.Counter); // Начиная с этой строки, MyClass не будет использоваться, объект MyClass, на который ссылается myInstance // поэтому теперь можно собирать мусор. // Однако MyClass.Counter не будет собирать мусор, поскольку это статическое поле?! // Статическое поле может быть «объектом большего размера», чем просто целое число, и оно будет // плохо не собирать мусор, верно? целое число1 = 10; целое число2 = 20; целое число = число1 + число2; Console.WriteLine($"Сумма {number1} и {number2} равна {sum}."); } }
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение
-
-
Собирается ли мусор из памяти Java вне кучи сборщиком мусора JVM? [закрыто]
Anonymous » » в форуме JAVA - 0 Ответы
- 30 Просмотры
-
Последнее сообщение Anonymous
-