Num*_*er8 1 c# garbage-collection memory-management
一些近代码试图说明问题,什么时候被标记为可用于垃圾收集的对象 -
class ToyBox
{
public List<Toy> Toys = new List<Toy>();
}
class Factory
{
public ToyBox GetToys()
{
ToyBox tb = new ToyBox();
tb.Toys.Add(new Toy());
tb.Toys.Add(new Toy());
return tb;
}
}
main()
{
ToyBox tb = Factory.GetToys();
// After tb is used, does all the memory get cleaned up when tb goes out of scope?
}
Run Code Online (Sandbox Code Playgroud)
Factory.GetToys()分配内存.什么时候记忆清理干净了?我假定当Factoy.GetToys()返回ToyBox对象到对象ToyBox唯一引用是一个在main(),因此,当该参考超出范围,玩具对象和对象ToyBox被标记为垃圾收集.
是对的吗?感谢您的任何见解......
是对的吗?
是的,当main方法完成执行时,tb变量超出范围(当然,除非你将一些指针添加到另一个具有更大范围的变量),并且tb有资格进行垃圾收集.当然,当实际的垃圾收集发生时,你无法控制.它可能在main方法完成执行后很久才会发生.这是决定最佳时刻的CLR.因此,如果在main方法完成后不立即回收所有分配的内存,请不要感到惊讶.