2014-07-23 4 views
5

क्या java.lang.Object के अंतर्निहित hashCode() विधि को लागू करने के JVM में प्रयोग किया जाता एल्गोरिथ्म है?क्या ठीक java.lang.Object के hashCode द्वारा प्रयोग किया जाता एल्गोरिथ्म है

[OpenJDK या Oracle JDK जवाब में पसंद किया जाता है]।

+2

बस उत्सुक ... चूंकि जावा एक खुला स्रोत है, तो आपने खुद को देखने से क्या रोक दिया? –

+5

@ पीएम 77-1 शायद यह तथ्य है कि यह 'मूल' विधि है और बहुत से लोग नहीं जानते कि इसके कार्यान्वयन को कहां देखना है। – Pshemo

+2

http://stackoverflow.com/questions/17977495/java-object-hashcode-algorithm देखें - जिसमें मूल स्रोत से लिंक हैं। हालांकि, स्रोत पढ़ने के बाद मैं और भी उलझन में हूं। – user2864740

उत्तर

5

यह कार्यान्वयन निर्भर (और भारी हां, तो एल्गोरिथ्म पूरी तरह कार्यान्वयन पर निर्भर है, जब तक कि यह संगत के रूप में।) हालांकि, इस सवाल का जवाब here के अनुसार, आप native source file जहां हैश OpenJDK में उत्पन्न होता है देख सकते हैं लेकिन एक दिलचस्प टिप्पणी आगे

// Possibilities: 
// * MD5Digest of {obj,stwRandom} 
// * CRC32 of {obj,stwRandom} or any linear-feedback shift register function. 
// * A DES- or AES-style SBox[] mechanism 
// * One of the Phi-based schemes, such as: 
// 2654435761 = 2^32 * Phi (golden ratio) 
// HashCodeValue = ((uintptr_t(obj) >> 3) * 2654435761)^GVars.stwRandom ; 
// * A variation of Marsaglia's shift-xor RNG scheme. 
// * (obj^stwRandom) is appealing, but can result 
// in undesirable regularity in the hashCode values of adjacent objects 
// (objects allocated back-to-back, in particular). This could potentially 
// result in hashtable collisions and reduced hashtable efficiency. 
// There are simple ways to "diffuse" the middle address bits over the 
// generated hashCode values 
// 

जैसा कि पहले ही कहा गया है, डिफ़ॉल्ट एल्गोरिथ्म बस एक यादृच्छिक संख्या के साथ जाने के लिए है,: 7, जो वास्तव में इस विशेष रिलीज में संभव एल्गोरिदम के एक नंबर निर्दिष्ट करता है (get_next_hash() समारोह को देखने) नीचे राज्य:

// Marsaglia's xor-shift scheme with thread-specific state 
// This is probably the best overall implementation -- we'll 
// likely make this the default in future releases. 

यह (obj^stwRandom) दृष्टिकोण संभावनाओं के ऊपर सूची में उल्लिखित के समान है, लेकिन यह भी हैश में बांधने "धागा विशेष राज्य" जानकारी से अवांछित उत्तराधिकार में जल्दी से आवंटित वस्तुओं के साथ जुड़े regularities के आसपास हो जाता है - तो अगर दो ऑब्जेक्ट्स को एक ही समय में आवंटित किया गया था क्योंकि उन्हें एक साथ निष्पादित दो अलग-अलग धागे पर आवंटित किया जा रहा था, हैश में खिलाए गए असतत थ्रेडिंग जानकारी को अभी भी सुनिश्चित करना चाहिए कि पर्याप्त हैश तैयार किए जाएंगे।

संबंधित मुद्दे