所有的例子都说它是线程安全,并且有这样的例子:
Cloner cloner=new Cloner();
MyClass clone=cloner.deepClone(o);在我的代码中,我就是这样做的:每次克隆时都创建一个新的。因此,问题是:这个和昂贵的对象应该创建一次并重复使用,还是正在创建一个新的对象?
发布于 2017-02-22 16:34:43
使用此测试:
@Test
public void loadTestCloner() {
Calendar cal = GregorianCalendar.getInstance();
long timer = System.currentTimeMillis();
for (int i = 0; i < 100000; i++) {
Cloner c1 = new Cloner();
Calendar x = c1.deepClone(cal);
}
System.out.println("total time for new one each time: [" + (System.currentTimeMillis() - timer) + "]ms");
long timer2 = System.currentTimeMillis();
Cloner c2 = new Cloner();
for (int i = 0; i < 100000; i++) {
Calendar x = c2.deepClone(cal);
}
System.out.println("total time for reused one: [" + (System.currentTimeMillis() - timer2) + "]ms");
}与Calander的结果:
使用我们的复杂对象:
只需使用1个对象并使用“超时”克隆:
所以我的结论是,虽然时间不多,而且因为它是线程安全,所以最好只做一次并重用它。
https://stackoverflow.com/questions/42376886
复制相似问题