आपके द्वारा पोस्ट की गई कक्षा कचरा नहीं होगी। आप इसे एक सांत्वना उत्पादन के साथ एक finalizer देकर यह परीक्षण कर सकते हैं:
public class MyClass
{
private static MyClass heldInstance;
public MyClass()
{
heldInstance = this;
}
~MyClass()
{
Console.WriteLine("Finalizer called");
}
}
class Program
{
static void Main(string[] args)
{
var x = new MyClass(); // object created
x = null; // object may be eliglible for garbage collection now
// theoretically, a GC could happen here, but probably not, with this little memory used
System.Threading.Thread.Sleep(5000);
// so we force a GC. Now all eligible objects will definitely be collected
GC.Collect(2,GCCollectionMode.Forced);
//however their finalizers will execute in a separate thread, so we wait for them to finish
GC.WaitForPendingFinalizers();
System.Threading.Thread.Sleep(5000);
Console.WriteLine("END");
}
}
उत्पादन होगा:
END
Finalizer called
जिसका मतलब है कि वर्ग केवल आवेदन की अंतिम टियरडाउन पर एकत्र हो जाता है, नहीं एक नियमित कचरा संग्रह के दौरान।
आप इस तरह इस वर्ग के कई उदाहरण बनाते हैं:
var x = new MyClass();
x = new MyClass();
x = new MyClass();
x = new MyClass();
तो सभी को छोड़कर हाल ही में एक कचरा एकत्र किया जाएगा।
आप मिलेगा
Finalizer called
Finalizer called
Finalizer called
END
Finalizer called
संभावित डुप्लिकेट [क्या स्थिर सदस्यों को कचरा इकट्ठा किया जाता है?] (Http://stackoverflow.com/questions/6600093/do-static-members-ever-get-garbage-collected) संपादित करें: संक्षेप में, नहीं, मुझे विश्वास नहीं है कि यह होगा। उदाहरण के लिए, आपके द्वारा पोस्ट किए गए कोड में, कोई कारण नहीं है कि सार्वजनिक कन्स्ट्रक्टर में 'if (heldInstance == null) नहीं हो सकता था, इसके अलावा, _instances_ जिसमें केवल एक ही संदर्भित संदर्भ स्वयं ही हैं, _eventually_ एकत्र किए जाएंगे जीसी द्वारा यह निर्धारित करता है कि यह अब सुलभ नहीं है। –
हां, ऐपडोमेन को अनलोड किए जाने से ठीक पहले वे एकत्र हो जाते हैं। यह तब तक अपरिहार्य है जब तक कक्षा में फाइनलाइज़र नहीं होता है। –
तथ्य यह है कि कक्षा का एक स्थिर क्षेत्र उसी वर्ग के उदाहरण * का संदर्भ दे रहा है * अप्रासंगिक है। स्थिर क्षेत्र जड़ें हैं; वे जीवित कुछ भी रखेंगे जो आपने उनके प्रकार के बावजूद रखे हैं। –