Performansı bu şekilde optimize etmeye çalışmanın mantıklı olduğunu düşünmüyorum. Bugün (2019) her iki durum da I5 Dizüstü Bilgisayarımda 100.000.000 döngü için yaklaşık 11 saniye çalışıyor:
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 ms (döngü içinde bildirim) ve 8236 ms (döngü dışında bildirim)
Birkaç milyar döngü ile adres tekilleştirme programları çalıştırıyor olsam bile 2 saniye farkla. 100 milyon döngü için herhangi bir fark yaratmaz çünkü bu programlar saatlerce çalışır. Ayrıca, yalnızca bir ek ifadeniz varsa, her şeyin farklı olduğunu unutmayın:
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 milisaniye (iç döngü), 3555 milisaniye (dış döngü) Döngü içinde StringBuilder'ı oluşturan ilk ifade bu durumda daha hızlıdır. Ve yürütme sırasını değiştirirseniz, çok daha hızlıdır:
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 milisaniye (dış döngü), 2908 milisaniye (iç döngü)
Saygılarımızla, Ulrich