Saya rasa tidak masuk akal untuk mencoba mengoptimalkan kinerja seperti itu. Hari ini (2019) kedua statment berjalan sekitar 11 detik untuk 100.000.000 loop di Laptop I5 saya:
String a;
StringBuilder sb = new StringBuilder();
long time = 0;
System.gc();
time = System.currentTimeMillis();
for (int i = 0; i < 100000000; i++) {
StringBuilder sb3 = new StringBuilder();
sb3.append("someString");
sb3.append("someString2");
sb3.append("someStrin4g");
sb3.append("someStr5ing");
sb3.append("someSt7ring");
a = sb3.toString();
}
System.out.println(System.currentTimeMillis() - time);
System.gc();
time = System.currentTimeMillis();
for (int i = 0; i < 100000000; i++) {
sb.setLength(0);
sb.delete(0, sb.length());
sb.append("someString");
sb.append("someString2");
sb.append("someStrin4g");
sb.append("someStr5ing");
sb.append("someSt7ring");
a = sb.toString();
}
System.out.println(System.currentTimeMillis() - time);
==> 11000 msec (deklarasi di dalam loop) dan 8236 msec (deklarasi loop luar)
Bahkan jika saya menjalankan program untuk pengurangan alamat dengan beberapa miliar pengulangan dengan selisih 2 detik. untuk 100 juta loop tidak ada bedanya karena program tersebut berjalan berjam-jam. Ketahuilah juga bahwa semuanya berbeda jika Anda hanya memiliki satu pernyataan tambahan:
System.gc();
time = System.currentTimeMillis();
for (int i = 0; i < 100000000; i++) {
StringBuilder sb3 = new StringBuilder();
sb3.append("someString");
a = sb3.toString();
}
System.out.println(System.currentTimeMillis() - time);
System.gc();
time = System.currentTimeMillis();
for (int i = 0; i < 100000000; i++) {
sb.setLength(0);
sb.delete(0, sb.length());
sb.append("someString");
a = sb.toString();
}
System.out.println(System.currentTimeMillis() - time);
==> 3416 msec (loop dalam), 3555 msec (loop luar) Pernyataan pertama yang membuat StringBuilder dalam loop lebih cepat dalam kasus itu. Dan, jika Anda mengubah urutan eksekusi, ini jauh lebih cepat:
System.gc();
time = System.currentTimeMillis();
for (int i = 0; i < 100000000; i++) {
sb.setLength(0);
sb.delete(0, sb.length());
sb.append("someString");
a = sb.toString();
}
System.out.println(System.currentTimeMillis() - time);
System.gc();
time = System.currentTimeMillis();
for (int i = 0; i < 100000000; i++) {
StringBuilder sb3 = new StringBuilder();
sb3.append("someString");
a = sb3.toString();
}
System.out.println(System.currentTimeMillis() - time);
==> 3638 msec (loop luar), 2908 msec (loop dalam)
Salam, Ulrich