मैंने ब्रायन गोएट्ज़ द्वारा कुछ टिप्पणियों में पढ़ा है कि धारावाहिक लैम्बडास "गैर-निष्पादन योग्य लैम्बडास की तुलना में काफी अधिक प्रदर्शन लागत है"।जावा में सीरियलज़ेबल लैम्बडास का प्रदर्शन 8
अब मैं उत्सुक हूं: वह ओवरहेड कहां है और इसका कारण क्या है? क्या यह केवल लैम्ब्डा के तात्कालिकता, या आमंत्रण में भी प्रभावित होता है?
नीचे दिए गए कोड में, दोनों मामलों (कॉलएक्सस्टिंग इंस्टेंस() और कॉलविथन्यूइंस्टेंस()) "माईफंक्शन" की क्रमिकता से प्रभावित हो सकते हैं, या केवल दूसरा मामला?
interface MyFunction<IN, OUT> {
OUT call(IN arg);
}
void callExistingInstance() {
long toAdd = 1;
long value = 0;
final MyFunction<Long, Long> adder = (number) -> number + toAdd;
for (int i = 0; i < LARGE_NUMBER; i++) {
value = adder.call(value);
}
}
void callWithNewInstance() {
long value = 0;
for (int i = 0; i < LARGE_NUMBER; i++) {
long toAdd = 1;
MyFunction<Long, Long> adder = (number) -> number + toAdd;
value = adder.call(value);
}
}
अच्छी व्याख्या के लिए धन्यवाद। –
यह स्पष्टीकरण समस्या को मार नहीं रहा है। Deserializing ऑब्जेक्ट्स हमेशा महंगा प्रतिबिंब का उपयोग करेंगे चाहे आप लैम्ब्डा अभिव्यक्तियों का उपयोग करें या नहीं। लेकिन प्रश्न का कोड कुछ भी निराशाजनक नहीं है। – Holger
प्रश्न अन्य प्रकार के लैमडब्स के विपरीत, धारावाहिक लैम्बडास को क्रमबद्ध करने और उपयोग करने के बारे में था। ओपी पूछ रहा था कि उन वस्तुओं के जीवन चक्र का कौन सा हिस्सा सामान्य लैम्ब्डा से कम प्रदर्शनकारी है। उनका कोड आमंत्रण और तत्कालता के बीच सही ढंग से अंतर करता है, और उसका प्रश्न सीधे उससे पूछता है। जैसा कि उत्तर इंगित करता है, उसके मामलों में से एक बिल्कुल प्रभावित होता है। Deserializing lambdas/अन्य वस्तुओं ("विशेष प्रतिबिंब") deserializing से बहुत अलग सामान/और यह स्वाभाविक रूप से अधिक महंगा है। – BadZen