कोडिंग मैं जावा के vararg प्रदर्शन की जांच के लिए चारों ओर आया था।जावा के varargs प्रदर्शन
मैं निम्नलिखित लिखने परीक्षण कोड:
public class T {
public static void main(String[] args) {
int n = 100000000;
String s1 = new String("");
String s2 = new String("");
String s3 = new String("");
String s4 = new String("");
String s5 = new String("");
long t = System.currentTimeMillis();
for (int i = 0; i < n; i++) {
foo();
}
System.err.println(System.currentTimeMillis() - t);
t = System.currentTimeMillis();
for (int i = 0; i < n; i++) {
baz(s1, s2, s3, s4, s5);
}
System.err.println(System.currentTimeMillis() - t);
t = System.currentTimeMillis();
for (int i = 0; i < n; i++) {
bar(s1, s2, s3, s4, s5);
}
System.err.println(System.currentTimeMillis() - t);
}
static void foo() {
}
static void bar(String a1, String a2, String a3, String a4, String a5) {
}
static void baz(String... a) {
}
}
मेरी मशीन पर औसत उत्पादन है:
78
4696
78
तरीकों लगता है कि पास चर किसी कीमत पर है?! अच्छा !
लेकिन varags का उपयोग 60x धीमी है! क्यूं कर ?
एक स्पष्टीकरण यह हो सकता है कि कार्यक्रम को ढेर पर सरणी बनाना चाहिए और समय जीसी द्वारा खर्च किया जाता है।
0
62
0
क्या के लिए इस अतिरिक्त समय खर्च कर रहा है और वैसे भी संकलक एक फिक्स चर कॉल करने के लिए इस को हल करने में सारी जानकारी है ...
इसकी नहीं मेरा इरादा: लेकिन कम छोरों के लिए मैं अभी भी आउटपुट के रूप में मिलता है उस के लिए अनुकूलन करने के लिए है, लेकिन मैंने पाया इस उत्सुक ...
अद्यतन
मैं एक नया परीक्षण जोड़ा
और यह एक तर्क संस्करण अभी भी 30x धीमा है। शायद दृश्य के पीछे एक ArrayList.toArray() है?
तो अपने कोड में कोई आवश्यक वैरिएग विधियों और लंबाई को ठीक करने के लिए रिफैक्टर से अवगत रहें। यह एक परफॉर्मेंस बढ़ावा हो सकता है।
यूप, यह वही होगा, क्योंकि विभिन्न संकलन से पहले वेरगास सिंटैक्टिक चीनी सरणी कॉल में परिवर्तित हो जाते हैं। – Riduidel
यह मूल रूप से सही है हालांकि मुझे लगता है कि आपको यह स्पष्ट करना चाहिए कि अंतर यह है कि varargs को एक सरणी आवंटित करने और पॉप्युलेट करने के लिए JVM की आवश्यकता होती है। चाहे वह ढेर या ढेर पर हो, यह काफी मुद्दा नहीं है (हालांकि हां, यह निश्चित रूप से ढेर पर है)। –
@ सेन ओवेन धन्यवाद, अपडेट किया गया। –