假设我们有:
public void foo()
{
someRefType test = new someRefType ();
test = new someRefType ();
}
垃圾收集器对第一个堆对象做什么?在新分配之前是否立即进行垃圾收集?一般机制是什么?
垃圾收集器对第一个堆对象做什么?
谁知道?这不是确定性的。可以这样想:在具有无限内存的系统上,垃圾收集器不会have to do anything。您可能认为这是一个不好的例子,但这就是垃圾收集器为您模拟的:一个具有无限内存的系统。因为在可用内存多于程序所需内存的系统上,垃圾收集器never必须跑。因此,您的程序无法对何时收集内存(如果有的话)做出任何假设。
所以,你的问题的答案是:我们不知道。
在新分配之前是否立即进行垃圾收集?
不。垃圾收集器不是确定性的。你不知道它什么时候会收集和释放垃圾。您不能对何时收集垃圾或何时运行终结器做出任何假设。
事实上,它不太可能如此快地收集(这会使收集发生得太频繁)。此外,在具有足够内存的系统上,垃圾收集器never必须跑。
一般机制是什么?
这是一个相当广泛的问题。但基本原理非常简单:垃圾收集器模拟具有无限内存的机器。为此,它以某种方式跟踪内存并能够确定内存何时是垃圾。当它认为合适时,由于需要模拟无限内存,它会不时收集这些垃圾并使其可再次分配。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)