面试之C#--垃圾回收器什么时候回收?

本文详细介绍了C#中的垃圾回收机制,包括何时回收对象、手动触发GC.Collect、using语句的使用、析构函数与Dispose方法。C#的垃圾回收器分为三代,主要管理引用类型在堆上的内存。值类型则在栈上分配,生命周期短,无需额外管理。通过使用Dispose方法配合GC.SuppressFinalize,可以更有效地管理资源。同时,文章强调了避免不必要的终结器和析构函数以优化性能。
摘要由CSDN通过智能技术生成

每个对象只有在该对象不存在任何引用才会被垃圾回收起回收。

可以调用静态方法System.GC.Collect()垃圾回收器,但是不建议这么做;

用using语句可以有效的自动释放掉资源。

实在没有办法才用从析构函数中调用Dispose方法。
class Example:IDisposable
~example(){
Dispose();
}
public virtual void Dispose();
{
if(!this.disposed){
try{
//在此释放稀缺资源
}
finally{
this.disposed=true;
GC.SuppressFinalize(this);
}
}
}
public void SomeBehavior()//示例方法
{
checkifdisposed();
}
...
private void checkifdisposed(){
if(this.disposed)
{
throw new ObjectDisposedException("Example");
}
}
private Resource scarce;
private bool disposed=false;
}

 

 

---------------------------------------------------------------------------------------------------------------------

附加C#垃圾回收器的分级回收机制:

 

C#中的回收器是分代的垃圾回收器(Gererational Garbage Collector) 它将分配的对象分为3个类别或代。(可用GC.GetGeneration方法返回任意作为参数的对象当前所处的代)最近被分配内存的对象被放置于第0代,因为第0代很小,小到足以放进处理器的二级(L2)缓存,所以它能够提供对对象的快速存取。经过一轮垃圾回收后,仍然保留在第

0代中的对象被移进第1代中,再经过一轮垃圾内存回收后,仍然保留在第1代中的对象则被移进第2代中,第2代中包含了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值