Java 终结器未完成';跑不动
我的程序退出时,我的运行失败 他来了:Java 终结器未完成';跑不动,java,finalizer,Java,Finalizer,我的程序退出时,我的运行失败 他来了: public class SomeClass implements SomeInterface { ... setup the PrintWriter os somewhere here /** oh, i guess i wanted to try out finalizer guardians here. */ @SuppressWarnings("unused") private final Object fina
public class SomeClass implements SomeInterface {
... setup the PrintWriter os somewhere here
/** oh, i guess i wanted to try out finalizer guardians here. */
@SuppressWarnings("unused")
private final Object finalizerGuardian = new Object(){
protected void finalize(){
try {
//actually, i cannot know if it was closed or not.
System.out.println("connection wasn't closed - it needs to be!");
os.flush();
os.close();
} catch (Exception se){
System.out.println("some sort of exception occurred? Weird");
}
}
};
...
}
我做错了什么?我以为瓜迪亚人一定会跑?还是不是这样?当程序终止时,PrintWriter操作系统肯定不会被刷新或关闭。
finalize()
在垃圾收集期间被调用,在此之前,您的程序可能已经存在。Finalizer线程是垃圾收集(GC)的一部分。虽然它确实是GC的一部分,但GC不能保证它何时运行。Finalize方法将对象移动到finalizer objects队列,在该队列中,finalizer线程在运行时清除队列中存在的对象。此处是否缺少一些信息?我(可能还有Java)只能看到私有类成员,它是一个包含一个方法的自定义对象。为什么要运行?我想他说的是。。。但不管怎样,我发现还有更多的问题,不要依赖终结器-在Java中,try finally块通常用于此目的。程序终止不运行gc?这是我不知道的,jls中没有关于在程序退出之前运行gc的内容。您可以尝试创建一个长时间运行的循环,并等待gc运行。