С помощью этого теста:
@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:
- общее время для нового каждый раз, когда: [644] мс
- общее время для повторного использования одного: [39] мс
И с использованием нашего комплексного объекта:
- общее время для нового каждый раз, когда: [9585] мс
- общее время для повторного использования одного: [416] мс
И только с использованием 1 объекта и с помощью «из таймера» Cloner:
- общее время для нового каждый раз, когда: [13] мс
- общее время для повторного использования одного: [0] мс
Итак, я пришел к выводу, что, хотя и не так много времени, и поскольку это Threadsafe, полезно сделать это один раз и повторно использовать его.
В качестве побочного комментария попробуйте использовать System.nanoTime() для измерения прошедшего времени. Это таймер, а currentTimeMillis() - скорее часы. Почему это может иметь значение: https://stackoverflow.com/a/351571 –