面试题答案
一键面试对象生命周期关键阶段
- 实例化阶段:使用
new
关键字创建对象时,为对象分配内存空间,并初始化对象的字段到默认值,然后执行构造函数中的代码,完成对象的初始化工作。 - 使用阶段:对象创建完成后,可以调用对象的方法、访问对象的属性,进行各种业务逻辑操作。
- 不可达阶段:当对象不再被任何活动的引用所指向时,该对象进入不可达状态。意味着程序代码无法再访问到这个对象。
- 终结阶段(可选):如果对象定义了析构函数(
Finalize
方法),垃圾回收器在回收对象内存前,会调用该对象的Finalize
方法,进行一些资源清理等收尾工作。但析构函数的调用是不确定的,可能会延迟对象内存的回收。 - 回收阶段:垃圾回收器在合适的时机回收对象占用的内存空间,将其返还给内存堆,以便后续重新分配使用。
垃圾回收器(GC)启动常见情况
- 内存压力:当托管堆中可用内存不足,无法为新对象分配足够的内存空间时,垃圾回收器会自动启动,回收不再使用的对象,释放内存。
- 手动调用:通过调用
GC.Collect()
方法,可以手动触发垃圾回收器进行垃圾回收操作。但通常不建议频繁手动调用,因为垃圾回收本身是有开销的,可能会影响程序性能。 - 特定垃圾回收模式:.NET 运行时环境可能会根据应用程序的运行情况,如应用程序处于闲置状态、达到一定的时间间隔等,触发特定模式的垃圾回收,以优化内存使用。