Строки и статические поля являются мусором? - PullRequest
5 голосов
/ 30 июля 2011

Когда строки и статические поля возвращаются сборщиком мусора?

Я спрашиваю об этом, потому что знаю, что static в ASP.NET всегда живы.

Ответы [ 4 ]

5 голосов
/ 30 июля 2011

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

Что касается строк, это зависит.Буквальные строки интернированы и поэтому всегда доступны.В противном случае применяются те же правила, что и для любого объекта.

3 голосов
/ 30 июля 2011

Строки являются объектами и будут собираться, когда на них нет ссылок.

статические поля обычно сохраняют постоянную ссылку на объект и таким образом удерживают эти объекты от сбора. Но до тех пор, пока вам все еще нужны эти объекты, все в порядке.

2 голосов
/ 30 июля 2011

Любое поле static, которое ссылается на объект, будет препятствовать сбору этого объекта, поскольку поля static связаны с объектом Type для класса.Те, в свою очередь, связаны с AppDomain и, таким образом, будут служить корнями GC.

Для strings это зависит от того, был ли он интернирован.Если это так, то внутренний пул для текущего AppDomain будет ссылаться на него и, таким образом, предотвращать сбор.Если нет, то string будет вести себя как любой другой объект класса и будет иметь право на сбор, когда он больше не доступен через цепочку ссылок из корня GC.

Обратите внимание, что в обоих случаях, еслиAppDomain выгружается, объекты становятся пригодными для сбора.

1 голос
/ 30 июля 2011

Нет, сборщик мусора не будет собирать статические поля. в общем, сборщик мусора не будет собирать ваши классы, пока экземпляр вашего класса существует и указывает, что он останется.

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