जावा 7 की रिलीज के साथ MethodHandle
आया, जो उपयोगकर्ता को इसके अंतर्निहित बाइटकोड का उपयोग करने के तरीके की तरह एक विधि का आह्वान करने की अनुमति देता है।जब मेथडहैंडल तेज होता है तो क्लास सदस्यों तक पहुंचने के लिए प्रतिबिंब का उपयोग क्यों करें?
एक लुक वस्तु पर कारखाने तरीकों के लिए विधियों, कंस्ट्रक्टर्स, और खेतों सभी प्रमुख उपयोग के मामलों के अनुरूप: विशेष रूप से,
MethodHandles.Lookup
वर्ग कारखाने तरीकों बनाने के लिए विधि वर्ग के सदस्यों तक पहुँचने के लिए संभालती है प्रदान करता है। फ़ैक्टरी विधि द्वारा बनाए गए प्रत्येक विधि हैंडल एक विशेष बाइटकोड व्यवहार के कार्यात्मक समकक्ष है।
कार्यात्मक रूप से, यह इन वर्ग वर्ग सदस्यों तक पहुंचने के लिए प्रतिबिंब का उपयोग करने के बराबर या कम समकक्ष है, फिर भी method handles are faster than reflection।
तो, क्या अभी भी Field#get(..)
/Method.invoke(..)
जैसे प्रतिबिंब कार्यक्षमताओं का उपयोग करने का कोई कारण है या क्या ये विधियां तेजी से विधि हैंडल की शुरुआत के साथ अप्रचलित हैं?
ध्यान दें कि जावा 7 में विधि हैंडल पेश किए जाने पर, मेरा प्रश्न मुख्य रूप से जावा 8 से संबंधित है, जिसमें उन्हें अनुमानित रूप से प्रत्यक्ष क्षेत्र/विधि कॉल के बराबर प्रदर्शन तक पहुंचने के लिए ऑप्टिमाइज़ किया गया था, प्रतिबिंब की क्षमता को पार करते हुए।
विधि हैंडल पर अधिक जानकारी के लिए, [MethodHandle - यह सब क्या है?] (Http: // stackoverflow देखें।कॉम/क्यू/88237 9 3/1247781) – Vulcan
यह बहुत तेजी से नहीं दिखता है, खासकर अगर आप प्रतिबिंब में पहुंच जांच बंद कर देते हैं ('सेट असफल (सत्य) ' – ZhongYu
@ bayou.io यह उचित लगता है, लेकिन क्या आपके पास कोई बेंचमार्क परीक्षण है साक्ष्य के रूप में? 'सेटएक्सेबल (सत्य)' को कॉल करने के लिए लिंक किए गए प्रश्न में बस बेंचमार्क को संशोधित करना और उन परिणामों को आउटपुट करना मेरे लिए पर्याप्त सबूत होगा। – Vulcan