我读过的关于java finalize方法的所有内容都说不要使用它.它似乎几乎永远不会被保证被调用,即使它存在也可能出现问题.
还有一些其他问题要求何时使用它,似乎普遍的共识绝不是.
我自己从未使用它(主要是因为没有警告),我没有看到它在任何地方使用过.
是否有任何合适的案例?有没有其他选择的情况?
如果没有,为什么会在那里?是否有内部类使用它并要求方法可用?或者它只是不应该存在的东西?
我对使用它的时间并不是那么感兴趣(已经用"从不"回答),但澄清为什么它甚至给出了"从不"的回答.如果它是如此无用和危险,为什么它没有被折旧和删除?
我们使用序列化实现了通用深度复制机制.
import java.io.*;
public class CopyUtil {
public static Object clone(Object source) {
Object retVal = null;
try {
ByteArrayOutputStream baos = new ByteArrayOutputStream();
ObjectOutputStream oos = new ObjectOutputStream(baos);
oos.writeObject(source);
oos.flush();
oos.close();
ObjectInputStream in = new ObjectInputStream(new ByteArrayInputStream(baos.toByteArray()));
retVal = in.readObject();
} catch (IOException ex) {
ex.printStackTrace();
} catch (ClassNotFoundException ex) {
ex.printStackTrace();
}
return retVal;
}
}
Run Code Online (Sandbox Code Playgroud)
存在相对大量的对象类,它们一直在不断发展,需要维护 - 这就是我们继续使用通用克隆机制的原因.我们没有保持津津乐道的想法readObject(),并writeObject()在200多个班.
不幸的是,Java中的序列化机制相对较慢,当我们的系统处于峰值负载时,我们遇到了问题.
是否有任何建议的方法可以让我们如何加快速度或者(如果我们错误地执行了这一点)克隆对象的替代方法?