запрос относительно сборщика мусора - PullRequest
0 голосов
/ 02 мая 2011

я знаю, что GC освобождает память obj, которая больше не используется, но я знаю одну вещь, что GC освобождает память, в которой есть подобный объект или ссылка или значение .... пожалуйста, помогите мне.

спасибо заранее ...

Ответы [ 2 ]

1 голос
/ 02 мая 2011

В ответ на комментарии к вопросу, кажется, вам необходимо уточнить несколько понятий:

В .NET объекты живут где-то в памяти. ссылка напоминает указатель на такой объект / место в памяти. значение - это некоторое целое значение (число, подобное 123).

Например, допустим, у вас есть объект типа MyClass , и вы создали новый экземпляр,Этот объект содержит строку.Эта строка является другим объектом, и ваш экземпляр MyClass содержит ссылку на строковый объект.

Сборщик мусора работает только с объектами .Он отслеживает ссылки на объект, если никто больше не ссылается на объект, сборщик мусора может освободить этот объект.В нашем примере, если сборщик мусора замечает, что никто не держит ссылку на экземпляр MyClass , то он обеспечивает освобождение объекта.Это, в свою очередь, приводит к исчезновению ссылки на строку, и сборщик мусора может также освободить строку (если, конечно, никто не держит ссылку).Значения не нужно обрабатывать каким-либо особым образом, поскольку они являются частью памяти, которая принадлежит объекту (и, следовательно, не может быть освобождена «независимо»).

То же самое верно для Java, BTW.

0 голосов
/ 02 мая 2011

Объект ссылочного типа (класс) становится мусором, когда на него больше нет ссылок. Он будет собран через некоторое время после каждого следующего запуска GC. Причина, по которой эти объекты могут быть мусором, заключается в том, что на них можно ссылаться из нескольких мест в программе, поэтому никакая отдельная часть программы не может освободить объект, потому что другие части могут все еще нуждаться в нем. Ответственность GC состоит в том, чтобы обнаружить, когда ни одна часть программы больше не нуждается в объекте.

Объект типа значения (структура или встроенный тип, например, целое число) просто копируется в каждое место, где его необходимо использовать, поэтому нет проблем с использованием одного значения из нескольких частей программы. , Для типов значений GC не требуется, потому что они всегда являются частью чего-то другого, что гарантирует их освобождение. Значение, хранимое в стеке (например, локальная переменная в методе), высвобождается, когда метод возвращается. Значение, хранящееся в объекте класса, освобождается, когда этот объект класса становится мусором.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...