जावा 8 स्ट्रीम प्रदर्शन बनाम। पारंपरिक संग्रह
आपने हाल ही में जावा 8 में कदम रखा है और क्लासिक संग्रह के मुकाबले इसके स्ट्रीम एपीआई के प्रदर्शन की तुलना करने के लिए एक अनौपचारिक बेंचमार्क आयोजित किया है। आपके परीक्षण में पूर्णांकों की सूची को फ़िल्टर करना, सम संख्याओं का वर्गमूल निकालना और परिणामों को दोहरी सूची में संग्रहीत करना शामिल है। हालाँकि, आप अपने परीक्षण की वैधता पर सवाल उठा रहे हैं और वास्तविक प्रदर्शन निहितार्थों को स्पष्ट करने के लिए उत्सुक हैं।
बेंचमार्क परीक्षण का आकलन
आपके प्रारंभिक परिणाम, जो धाराओं का संकेत देते हैं संग्रह की तुलना में धीमी गति ने चिंता बढ़ा दी है। अधिक विश्वसनीय मूल्यांकन सुनिश्चित करने के लिए, संभावित त्रुटियों का समाधान करना और निष्पक्ष परीक्षण करना आवश्यक है। यहां कुछ विचार दिए गए हैं:
परिणाम:
बेंचमार्क मोड नमूने माध्य माध्य त्रुटि इकाइयां StreamVsVanilla.stream औसत 10 17.588 0.230 एनएस/ऑप StreamVsVanilla.vanilla avgt 10 10.796 0.063 ns/op@OutputTimeUnit(TimeUnit.NANOSECONDS) @BenchmarkMode(Mode.AverageTime) @OperationsPerInvocation(StreamVsVanilla.N) public class StreamVsVanilla { public static final int N = 10000; static ListsourceList = new ArrayList(); static { for (int i = 0; i vanilla() { List result = new ArrayList(sourceList.size() / 2 1); for (Integer i : sourceList) { if (i % 2 == 0){ result.add(Math.sqrt(i)); } } return result; } @Benchmark public List stream() { return sourceList.stream() .filter(i -> i % 2 == 0) .map(Math::sqrt) .collect(Collectors.toCollection( () -> new ArrayList(sourceList.size() / 2 1))); } }
Findings
प्रारंभिक परिणामों के विपरीत, JMH बेंचमार्क स्पष्ट रूप से दिखाता है कि पारंपरिक संग्रह दृष्टिकोण तुलना में काफी तेज है इस विशेष में स्ट्रीम दृष्टिकोण परिदृश्य।@OutputTimeUnit(TimeUnit.NANOSECONDS) @BenchmarkMode(Mode.AverageTime) @OperationsPerInvocation(StreamVsVanilla.N) public class StreamVsVanilla { public static final int N = 10000; static ListsourceList = new ArrayList(); static { for (int i = 0; i vanilla() { List result = new ArrayList(sourceList.size() / 2 1); for (Integer i : sourceList) { if (i % 2 == 0){ result.add(Math.sqrt(i)); } } return result; } @Benchmark public List stream() { return sourceList.stream() .filter(i -> i % 2 == 0) .map(Math::sqrt) .collect(Collectors.toCollection( () -> new ArrayList(sourceList.size() / 2 1))); } }
निष्कर्ष
इन बेहतर बेंचमार्किंग परिणामों के आधार पर, हम यह निष्कर्ष निकाल सकते हैं कि:स्ट्रीम स्वाभाविक रूप से संग्रह की तुलना में धीमी नहीं हैं। हालाँकि, उनका ओवरहेड कुछ उपयोग के मामलों में लाभ से अधिक हो सकता है, जैसे कि सरल फ़िल्टरिंग और मैपिंग ऑपरेशन।स्ट्रीम कोड सादगी और रखरखाव के मामले में महत्वपूर्ण लाभ प्रदान करती हैं। वे डेटा प्रोसेसिंग पाइपलाइनों को सरल बनाते हैं और बॉयलरप्लेट कोड को कम करते हैं।
प्रदर्शन-महत्वपूर्ण कोड पथों के लिए, हमेशा संपूर्ण बेंचमार्किंग करने और अपने एप्लिकेशन की विशिष्ट आवश्यकताओं पर विचार करने की सलाह दी जाती है।
अस्वीकरण: उपलब्ध कराए गए सभी संसाधन आंशिक रूप से इंटरनेट से हैं। यदि आपके कॉपीराइट या अन्य अधिकारों और हितों का कोई उल्लंघन होता है, तो कृपया विस्तृत कारण बताएं और कॉपीराइट या अधिकारों और हितों का प्रमाण प्रदान करें और फिर इसे ईमेल पर भेजें: [email protected] हम इसे आपके लिए यथाशीघ्र संभालेंगे।
Copyright© 2022 湘ICP备2022001581号-3