Are Java 8 lambdas compiled as inner classes, methods or something else? -
इस सवाल का पहले से ही एक उत्तर है: < / P>
- 1 उत्तर
मैंने आज यह लेख पढ़ा है लैम्ब्दास के बारे में:
लेख से पता चलता है, कि लैंबडा <मजबूत> नहीं है एनो इनर क्लास के रूप में कार्यान्वित (प्रदर्शन के कारण)
मैंने एक बहुत सरल स्निपेट की कोशिश की है:
निजी शून्य रन () {System.out.println (यह); giveHello (System.out :: println); } निजी शून्य देनाहेलो (उपभोक्ता और लेफ्टिनेंट; स्ट्रिंग & gt; उपभोक्ता) {System.out.println (उपभोक्ता); consumer.accept ( "हैलो"); }
और आउटपुट है:
sample.Main@14ae5a5 sample.Main$$Lambda$1/168423058@4a574795 हैलो
तो यह वही उदाहरण नहीं है यह कुछ केंद्रीय "लम्बेडा फैक्टरी" उदाहरण या तो नहीं है ..
लैम्ब्डा कैसे लागू किया जाता है?
यह अभिव्यक्ति है कि आप एक वास्तविक लैम्ब्डा अभिव्यक्ति पास करते हैं और एक विधि संदर्भ नहीं मानते हैं, एक अलग, सिंथेटिक विधि के रूप में संकलित किया गया है। अपेक्षित कार्यात्मक इंटरफ़ेस (जैसे, एक
स्ट्रिंग को
उपभोक्ता & lt; स्ट्रिंग & gt; के मामले में) के किसी भी औपचारिक तर्क के अलावा, इसमें किसी भी कैप्ड मान के लिए तर्क शामिल होगा
कोड स्थान पर जहां एक लैम्ब्डा अभिव्यक्ति या विधि संदर्भ दिखाई देता है, एक
invokedynamic निर्देश उत्सर्जित होता है। पहली बार यह निर्देश हिट हो गया है, कॉल को
लैम्ब्डा मेटाटाएफ़िनेटिक पर बूटस्ट्रैप विधि में बनाया गया है यह बूटस्ट्रैप विधि लक्ष्य कार्यात्मक इंटरफ़ेस का एक वास्तविक कार्यान्वयन तय करेगी जो लक्षित विधियों के लिए प्रतिनिधि होगी, और यह वही हो जाता है जो वापस आ जाता है। लक्ष्य विधि या तो लैम्ब्डा शरीर का प्रतिनिधित्व सिंथेटिक पद्धति या
:: ऑपरेटर का उपयोग करके जो भी नामित विधि प्रदान की गई थी। जबकि एक वर्ग जो कार्यात्मक अंतरफलक लागू करता है है बनाया जा रहा है, प्रक्रिया स्थगित है; यह समय संकलन में नहीं होता है।
अंत में, रनटाइम को
इनोकॉकेनेमिक साइट को बूटस्ट्रैप परिणाम 1 के साथ पेस्ट करता है, जो प्रभावी रूप से एक कन्स्ट्रक्टर कॉल है किसी भी कब्जा किए मूल्यों के साथ उत्पन्न प्रतिनिधि, जिसमें (संभवतः) एक आमंत्रण लक्ष्य 2 शामिल है यह बाद के कॉल के लिए बूटस्ट्रैपिंग प्रक्रिया को हटाकर प्रदर्शन को कम करता है।
1 देखें, हॉलर के सौजन्य।
2 लैम्ब्डा के मामले में जो कोई कब्जा नहीं करता है,
invokedynamic निर्देश आम तौर पर एक साझा प्रतिनिधि उदाहरण के लिए हल करेंगे, जिसे बाद के कॉल के दौरान पुन: उपयोग किया जा सकता है, हालांकि यह कार्यान्वयन विवरण है। >
Comments
Post a Comment