Mit diesem Test:
@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");
}
Mit Calander Ergebnisse:
- Gesamtzeit für neue jedes Mal: [644] ms
- Gesamtzeit für wiederverwendet ein: [39] ms
Und mit unserem komplexen Objekt:
- Gesamtzeit für neue jedes Mal: [9585] ms
- Gesamtzeit für wiederverwendet ein: [416] ms
Und nur mit 1 Objekt und mit einem "out of timer" Cloner:
- Gesamtzeit für neue jedes Mal: [13] ms
- Gesamtzeit für eine wieder verwendet: [0] ms
Also ich folge, dass, obwohl nicht viel Zeit, und da es Threadssafe ist, es gut ist, dies einmal zu machen und es wieder zu verwenden.
Als Nebenkommentar verwenden Sie System.nanoTime() zum Messen der verstrichenen Zeit. Es ist ein Timer, und currentTimeMillis() ist eher eine Uhr. Warum dies von Bedeutung sein kann: https://stackoverflow.com/a/351571 –