क्या कुछ स्रोत कोड खोदने और इसे समझने के लिए कोडिंग करते थे, और यहां मैंने जो पाया है:
जावा की 'विधि' कक्षा में 'मेथडएक्सेसर' प्रकार का एक सदस्य चर 'विधि प्राप्तकर्ता' है जो विधि के आह्वान के समान एक विधि 'invoke' वाला इंटरफ़ेस है। विधियों के अनुरोध के लिए विधियों का आह्वान किया गया है।
यदि मुद्रास्फीति सक्षम है (कोई इन्फ्लूएंशन गलत है) यह एक्सेसर एक कार्यान्वयन को इंगित करता है जो इस जावा विधि को चलाने के लिए जेएनआई का उपयोग करता है (मुझे लगता है कि एपीआई का उपयोग GetObjectClass, GetMethodID और कॉल * विधि) का उपयोग करना है। यह द्वंद्व प्रेषण की तरह है, और जेएनआई के साथ निष्पादन इस और अन्य कारणों से धीमा है। (What makes JNI calls slow?)
प्रतिबिंब के माध्यम से एक विधि के 15 फांसी के बाद ('15' डिफ़ॉल्ट है और बदला जा सकता है) और noInflation झूठी साथ, JNI आधारित एक्सेसर एक वर्ग मक्खी पर (नाम गतिशील रूप से उत्पन्न होता है, उदाहरण के लिए बनाता है 'GeneratedMethodAccessor1' कहें) जिसमें आवेषण विधि भी है। अब, इस 'invoke' विधि के भीतर, यह अपने संबंधित वर्ग में पहला 'obj' तर्क डालता है, और फिर उस पर लक्षित विधि को कॉल करता है। इसके बाद यह इस वर्ग का एक उदाहरण बनाता है, और विधि को बदलता है एक्सेसर सेटिंग्स जैसे कि विधि के हर निष्पादन को जेएनआई एक्सेसर के बजाय इस उदाहरण में सौंप दिया गया है। इसे मुद्रास्फीति कहा जाता है।
क्योंकि यह उदाहरण जावा क्लास का है जो जावा ऑब्जेक्ट को प्रतिनिधि करता है, प्रतिनिधिमंडल अब एक सामान्य जावा प्रतिनिधिमंडल है। यह कभी भी जेएनआई नहीं जाता है और इसलिए उस ओवरहेड को बचाता है, साथ ही जेआईटीसी उस पर अन्य अनुकूलन भी कर सकता है जिसके कारण यह कुशल हो जाता है।
नकारात्मकता यह है कि, यदि इस तरह से कई तरीकों से फुलाया जाता है, तो उनके वर्ग परमिट स्थान पर कब्जा होता है और संभवतः स्मृति त्रुटि से बाहर हो सकता है।
जानकारी के लिए, देखें:
http://hg.openjdk.java.net/jdk8/jdk8/jdk/file/tip/src/share/classes/sun/reflect/ReflectionFactory.java
http://java.sun.com/docs/books/jni/html/fldmeth.html
http://anshuiitk.blogspot.com/2010/11/excessive-full-garbage-collection.html
बहुत अच्छा स्पष्टीकरण, धन्यवाद – ozhan
@Ozhan Duz खुशी है कि आप इसे पसंद करते हैं। धन्यवाद। – shrini1000