小弟写了一个类很简单:
public class FiscnApp
{
public void initialize()
{
System.out.println("initialize"); }
public void unInitialize()
{
System.out.println("unInitialize");
}
}
如何在类销毁前执行unInitialize方法?
小弟用finalize发现他不一定被执行,加上System.runFinalizersOnExit(true)也有问题
(继承Runable接口需要new Thread, 也不符合要求)
不知道各位大侠有好办法没有?
public class FiscnApp
{
public void initialize()
{
System.out.println("initialize"); }
public void unInitialize()
{
System.out.println("unInitialize");
}
}
如何在类销毁前执行unInitialize方法?
小弟用finalize发现他不一定被执行,加上System.runFinalizersOnExit(true)也有问题
(继承Runable接口需要new Thread, 也不符合要求)
不知道各位大侠有好办法没有?
如果没有调用,说明这个实例没有被垃圾回收,也就是没有被销毁
你可以试试在做销毁操作前,先把这个实例置为null,确保没有其他地方对它有引用
我的结论是你的需求可能没法满足,因为JAVA不像其它语言比如C++,程序员有对占用释放内存的绝对控制权。
关注其他问答!
不知道servlet的destroy()方法是个什么机制?
unInitialize可以打印出,重写finalize()方法,然后在finalize()方法内调用unInitialize()方法
再System.gc();让JVM尽快回收不被引用的对象public class FinalizeTest { public static void main(String[] args) {
new FinalizeTest();
System.gc();
} public void finalize() {
unInitialize();
} public void unInitialize() {
System.out.println("unInitialize");
}
}
也就是保证没有变量引用它,
然后等jvm自动回收它,或者手动调用System.gc()通知垃圾回收器回收垃圾
这时在回收对象前才会调用finalize方法
只是suggests that the Java Virtual Machine expend effort toward recycling unused objects
没有可以强制JVM进行垃圾回收的方法