मुझे नहीं लगता कि यह इस तरह के प्रदर्शन को अनुकूलित करने की कोशिश करने के लिए साधुता है। आज (2019) दोनों मूर्तियाँ मेरे I5 लैपटॉप पर 100.000.000 लूप के लिए लगभग 11sec चल रही हैं:
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 मिसे (लूप के अंदर घोषणा) और 8236 मिसे (लूप के बाहर की घोषणा)
भले ही आई विलम रनिंग प्रोग्राम्स फॉर अड्रेस डेडलिनेशन विथ कुछ बिलियन लूप्स ऑफ़ 2 सेकंड का अंतर है। 100 मिलियन छोरों के लिए कोई फर्क नहीं पड़ता क्योंकि यह कार्यक्रम घंटों तक चल रहा है। यह भी ध्यान रखें कि यदि आपके पास केवल एक परिशिष्ट विवरण है तो चीजें अलग-अलग हैं:
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 मिसेक (लूप के अंदर), 3555 मिसे (लूप के बाहर) पहला स्टेटमेंट जो लूप के भीतर स्ट्रिंगबर्स्ट बना रहा है, उस मामले में तेज है। और, यदि आप निष्पादन के क्रम को बदलते हैं तो यह अधिक तेज होता है:
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 मिसे (लूप के बाहर), 2908 मिसे (लूप के अंदर)
सादर, उलरिच