1 using System; 2 3 namespace GCTest 4 { 5 class Program 6 { 7 static void print(string str) { Console.WriteLine(str); } 8 static void Main(string[] args) 9 { 10 var o1 = new obj(); 11 print("系统支持的最大代数:" + GC.MaxGeneration); 12 print("o1所在代为:"+GC.GetGeneration(o1));//对象刚创建时位于0代 13 14 //对所有代进行回收,o1依然存活,从0代移到1代 15 GC.Collect(); 16 print("o1所在代为:" + GC.GetGeneration(o1)); 17 18 var o2 = new obj();//新建对象在0代 19 //回收,o1移动到2代,o2移动到1代 20 GC.Collect(); 21 print("o1所在代为:" + GC.GetGeneration(o1) + ",o2所在代为:" + GC.GetGeneration(o2)); 22 //2代上的对象如果依然被引用,在回收时将驻留在2代上 23 GC.Collect(); 24 print("o1所在代为:" + GC.GetGeneration(o1)); 25 o1 = null;//将引用释放的时候,并没有立即执行回收 ,也就是说o1原来指向的对象依然存在。 26 print("此时未执行回收!"); 27 GC.Collect(); 28 Console.ReadKey(); 29 } 30 } 31 class obj 32 { 33 ~obj() 34 { 35 Console.WriteLine("析构……"); 36 } 37 } 38 39 }
时间: 2024-11-29 12:09:03