开发者

Are strings and static fields garbage collected?

When do strings and static fields get reclaimed by the garbage collector?

I'm asking this because I know statics开发者_JAVA百科 in ASP.NET are always live.


The garbage collector only collects objects that are not accessible. An object referenced by a static field is accessible as soon as its class is loaded, so it will obviously not get collected (unless of course the field is set to refer to something else, causing the original object to become potentially eligible for collection).

As for strings, it depends. Literal strings are interned and therefore always accessible. Otherwise, same rules apply as for any object.


Strings are objects and will be collected when un-referenced.

static fields usually keep a permanent reference to an object and thus keep those objects from being collected. But as long as you still need those objects that's quite alright.


Any static field that references an object will prevent that object from being collected, since static fields are associated with the Type object for a class. Those in turn are associated with an AppDomain, and thus will serve as GC roots.

For strings, it is dependent on whether or not it has been interned. If it has, then the intern pool for the current AppDomain will reference it and thus prevent collection. If not, then a string will behave like any other class object, and be eligible for collection when it is no longer accessible via a chain of references from a GC root.

Note that in both cases, if the AppDomain is unloaded, the objects will become eligible for collection.


No, the garbage collector will not collection the static fields. in general the garbage collection will not collection you classes as long as an instance of your class exists and is pointed to it will stay.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜