#c#-4.0
#c #-4.0
Вопрос:
я знаю, что GC освобождает память obj, которая больше не используется, но я знаю одно, что GC освобождает память в форме подобного объекта, ссылки или значения…. пожалуйста, помогите мне.
заранее спасибо…
Комментарии:
1. Неясно, в чем заключается ваш вопрос. Вы спрашиваете, как GC освобождает память? Или за какие типы вещей он отвечает за выпуск?
2. я хочу знать одну вещь: GC освобождает память в каком термине объекта, ссылки или значения…
3. Боюсь, это предложение не имеет особого смысла. Не могли бы вы, пожалуйста, попытаться перефразировать его и описать другим / более подробным способом?
4. в какой форме GC освобождает память …1.объект 2. ссылка 3. значение
5. GC освобождает память, которая является объектом, ссылкой или значением……
Ответ №1:
В качестве ответа на комментарии к вопросу, похоже, вам нужно разъяснение нескольких концепций:
В .NET объекты находятся где-то в памяти. Ссылка — это что-то вроде указателя на такой объект / ячейку памяти. Значение — это некоторое целое значение (число, подобное 123).
Допустим, у вас есть объект типа MyClass, и вы создали новый экземпляр. Этот объект содержит строку. Эта строка является другим объектом, и ваш экземпляр MyClass содержит ссылку на объект string.
Сборщик мусора работает только с объектами. Он отслеживает ссылки на объект, если никто больше не ссылается на объект, сборщик мусора может освободить этот объект. В нашем примере, если сборщик мусора замечает, что ни у кого нет ссылки на экземпляр MyClass, то он удостоверяется, что объект освобожден. Это, в свою очередь, приводит к исчезновению ссылки на строку, и сборщик мусора может затем также освободить строку (если, конечно, никто другой не хранит ссылку). Значения не нужно обрабатывать каким-либо особым образом, поскольку они являются частью памяти, принадлежащей объекту (и, следовательно, не могут быть освобождены «независимо»).
Кстати, то же самое верно и для Java.
Ответ №2:
Объект ссылочного типа (класс) становится мусором, когда ссылок на него больше не существует. Он будет собран через некоторое время после этого, при каждом следующем запуске GC. Причина, по которой эти объекты могут быть мусором, заключается в том, что на них можно ссылаться из нескольких мест в программе, поэтому ни одна отдельная часть программы не может освободить объект, потому что он все еще может понадобиться другим частям. Ответственность GC заключается в обнаружении того, когда ни одна часть программы больше не нуждается в объекте.
Объект типа значения (struct или встроенный тип, такой как integer) просто копируется в каждое место, которое должно его использовать, поэтому нет проблем с использованием одного значения из нескольких частей программы. Для типов значений не требуется GC, потому что они всегда являются частью чего-то другого, что гарантирует их освобождение. Значение, хранящееся в стеке (например, локальная переменная в методе), освобождается при возврате метода. Значение, хранящееся в объекте класса, освобождается, когда этот объект класса становится мусором.