MST

星途 面试题库

面试题:C#中对象生命周期的关键阶段有哪些及垃圾回收何时可能启动

请阐述C#中对象从创建到被销毁,其生命周期主要经历哪几个关键阶段?在哪些常见情况下,垃圾回收器(GC)可能会启动工作?
32.1万 热度难度
编程语言C#

知识考点

AI 面试

面试题答案

一键面试

对象生命周期关键阶段

  1. 实例化阶段:使用 new 关键字创建对象时,为对象分配内存空间,并初始化对象的字段到默认值,然后执行构造函数中的代码,完成对象的初始化工作。
  2. 使用阶段:对象创建完成后,可以调用对象的方法、访问对象的属性,进行各种业务逻辑操作。
  3. 不可达阶段:当对象不再被任何活动的引用所指向时,该对象进入不可达状态。意味着程序代码无法再访问到这个对象。
  4. 终结阶段(可选):如果对象定义了析构函数(Finalize 方法),垃圾回收器在回收对象内存前,会调用该对象的 Finalize 方法,进行一些资源清理等收尾工作。但析构函数的调用是不确定的,可能会延迟对象内存的回收。
  5. 回收阶段:垃圾回收器在合适的时机回收对象占用的内存空间,将其返还给内存堆,以便后续重新分配使用。

垃圾回收器(GC)启动常见情况

  1. 内存压力:当托管堆中可用内存不足,无法为新对象分配足够的内存空间时,垃圾回收器会自动启动,回收不再使用的对象,释放内存。
  2. 手动调用:通过调用 GC.Collect() 方法,可以手动触发垃圾回收器进行垃圾回收操作。但通常不建议频繁手动调用,因为垃圾回收本身是有开销的,可能会影响程序性能。
  3. 特定垃圾回收模式:.NET 运行时环境可能会根据应用程序的运行情况,如应用程序处于闲置状态、达到一定的时间间隔等,触发特定模式的垃圾回收,以优化内存使用。