它是否强制线程调度程序拿起gc线程执行,或者它只是简单地使用gc线程优先?运行环境gc实际上做了什么以及导致此输出的是什么?
class Test1
{
public static void main(String[] args)
{
Test1 test = new Test1();
test = null;
Runtime.getRuntime().gc();
System.out.println("in main after gc...");
public void finalize()
{
System.out.println("in finalize method...");
}
}
输出可能性1: 在finalize方法... 在GC后主...
输出可能性2: 在主GC之后... 在finalize方法...
输出可能性1:说明: 此输出可能是由于“Runtime.getRuntime().gc()”使gc线程执行哪条打印的第一行,之后主线程被拾取并打印第二行。
输出可能性2:解释: 是什么导致这个输出? 是否因为“Runtime.getRuntime().gc()”使gc线程的优先级为高,以便主线程在gc线程被拾取后持续一段时间?
我认为它是特定于实现的,但我认为gc“建议”垃圾回收。一个通常被忽略的建议(因为JVM知道它在做什么,并告诉它什么时候进行垃圾收集通常是一个糟糕的主意) –
没有保证何时调用finalize,因此无论调用gc还是不调用gc –
除了作为调试工具外,您不应该使用终结器。你不能依靠他们。 –