Nit*_*tin 4 c# garbage-collection
出于好奇,我想知道是否有可能出现垃圾收集器无法运行或根本不运行的情况(可能是由于异常)?
如果是,很可能会出现OutOfMemory/Stackoverflow异常.那么在这种情况下,仅通过查看异常消息,stacktrace等,我们就可以确定gc未能运行的核心问题.
正如其他人所提到的,许多事情都可能阻止GC运行.FailFast快速失败; 在拆除建筑物之前,它不会停下来取出垃圾.但你具体询问了例外情况.
未捕获的异常产生实现定义的行为,因此它是实现定义的,无论是否运行finally块,是否运行垃圾收集,以及是否在存在未捕获的异常时终结终结器队列对象.当发生这种情况时,允许CLR的实现执行任何操作,并且"任何"包括"运行GC"和"不运行GC".事实上,CLR的实施已经改变了他们的行为; 在CLR的v1.0中,终结器线程上的未捕获异常取消了该过程,在v2.0中捕获了终结器线程上的未捕获异常,记录错误,并且终结器继续运行.