Jue*_*gen 4 c# heap garbage-collection
说我们有:
public void foo()
{
someRefType test = new someRefType ();
test = new someRefType ();
}
Run Code Online (Sandbox Code Playgroud)
垃圾收集器对第一个堆对象做了什么?是否在新任务之前立即收集垃圾?一般机制是什么?谢谢,Juergen
jas*_*son 14
垃圾收集器对第一个堆对象做了什么?
谁知道?这不是确定性的.想想看这样的:用无限的内存的系统上,垃圾收集器不具有做任何事情.你可能认为这是一个糟糕的例子,但这就是垃圾收集器为你模拟的东西:一个拥有无限内存的系统.因为在具有比程序所需的更多可用内存的系统上,垃圾收集器永远不必运行.因此,您的程序无法对何时(如果有的话)收集内存做出任何假设.
所以,你的问题的答案是:我们不知道.
是否在新任务之前立即收集垃圾?
不,垃圾收集器不确定.你不知道什么时候收集和释放垃圾.您无法对何时收集垃圾或何时运行终结器做出任何假设.
实际上,收集它的速度非常快(这会使收集过于频繁).此外,在具有足够内存的系统上,垃圾收集器永远不必运行.
一般机制是什么?
这是一个相当广泛的问题.但基本原理非常简单:垃圾收集器模拟具有无限内存的机器.为此,它以某种方式跟踪内存,并能够确定内存何时是垃圾.当它认为合适时,由于需要模拟无限内存,它将不时收集这些垃圾并使其可用于再次分配.