@TheLostMind का उल्लेख किया है, आप OpenJDK से स्रोत कोड प्राप्त कर सकते हैं - कुछ हद तक एक newer version (JDK9) में देख, getClass()
देशी विधि
JNIEXPORT jclass JNICALL
Java_java_lang_Object_getClass(JNIEnv *env, jobject this)
{
if (this == NULL) {
JNU_ThrowNullPointerException(env, NULL);
return 0;
} else {
return (*env)->GetObjectClass(env, this);
}
}
तो तरह कार्यान्वित किया जाता है, अनिवार्य रूप से उसके द्वारा यह JVM के प्रतिनिधियों है पर्यावरण Class
ऑब्जेक्ट को वापस करने के लिए GetObjectClass()
फ़ंक्शन का उपयोग करता है। आप इसे शुरुआती बिंदु के रूप में उपयोग कर सकते हैं - यदि आप गहराई से जाना चाहते हैं, तो मेरा सुझाव है कि आप Mercurial का उपयोग करके http://hg.openjdk.java.net/ से जेडीके स्रोत कोड देखें, ताकि आप इसे ब्राउज़ कर सकें। जब इस तरह के हॉटस्पॉट के रूप में एक JIT कम्पाइलर का उपयोग कर
@Holger उल्लेख के रूप में, वहाँ कुछ प्रदर्शन अनुकूलन कर रहे हैं - उदाहरण के लिए, Performance techniques used in the Hotspot JVM कहते हैं, "Object.getClass()
एक या दो निर्देश है।"। इसका अर्थ यह है कि उपर्युक्त कोड Object.getClass()
का एक संभावित कार्यान्वयन दिखाता है, लेकिन यह कार्यान्वयन रनटाइम और/या वास्तविक जेवीएम (व्याख्या/जेआईटीटेड, क्लाइंट/सर्वर, ओरेकल मानक/जेआरॉकिट, ...) पर आधारित हो सकता है
स्रोत
2014-10-29 09:19:18
'getClass()' मूल विधि कॉल है .. तो, आपके पास जेडीके के साथ भेजे गए स्रोत कोड में उस विधि का स्रोत कोड नहीं होगा। – TheLostMind
@TheLostMind: तो, फिर देशी कोड इसे कैसे कार्यान्वित करता है? – batman
@batman आप क्यों जानना चाहते हैं? यह कुछ जटिल है जो पूरी तरह से जावा वर्चुअल मशीन लागू करने के तरीके पर निर्भर करता है और यह आंतरिक डेटा संरचना कैसे कार्य करता है। यह जेवीएम के प्रति विक्रेता और संस्करण को अलग कर सकता है। जब तक getClass() विनिर्देश की तरह काम करता है, इसका वर्णन करता है, आपको यह जानने की आवश्यकता नहीं है कि यह कैसे कार्यान्वित किया गया है। –