2014-07-23 4 views
5

?tam java.lang.Object en hashCode tarafından kullanılan algoritma nedir <code>java.lang.Object</code> 'ın örtük <code>hashCode()</code> yöntemini uygulamak için <strong><em><code>JVM</code></em></strong> kullanılan algoritma nedir

[OpenJDK veya Oracle JDK cevap tercih edilir].

+2

Sadece meraklı ... Java açık bir kaynak olduğu için, kendinizi kendinizden izlemekten neyi durdurdu? –

+5

@ PM77-1 belki de bunun aslında “yerli” yöntem olduğu ve pek çok kişinin uygulama için nereye bakılacağını bilmediği gerçeğidir. – Pshemo

+2

Yerel kaynağa bağlanan http://stackoverflow.com/questions/17977495/java-object-hashcode-algorithm adresine bakın. Ancak, kaynağı okuduktan sonra daha da kafam karıştı. – user2864740

cevap

5

It uygulama bağımlı (ve ağır nedenle, algoritma sürece tutarlı olarak, tamamen uygulamaya kadariçindir.) Ancak, cevap here uyarınca, sen karma OpenJDK oluşturulur native source file görebilirsiniz Ancak ilginç bir açıklama ayrıca, Daha önce belirtildiği

// 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 
// 

, varsayılan algoritması sadece rastgele bir sayı ile gitmektir: 7 aslında bu özel sürümde mümkün algoritmalar numarasını belirtir, (get_next_hash() fonksiyonu bakmak) aşağı durumları:

// 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. 

Bu olasılıklar yukarıdaki listede belirtilen (obj^stwRandom) yaklaşıma benzer, ama aynı zamanda karma içine "parçacığına özgü durumu" bilgisini bağlayarak arkaya hızla ayrılan nesne ile ilişkili istenmeyen düzenliliklerin etrafında alır - eğer öyleyse Aynı anda iki nesnenin tahsis edilmesinden dolayı çok benzer bir zamanda tahsis edilen iki nesne, hashta beslenen ayrı diş ipliği bilgilerinin, yine de yeterli sayıda karma oluşturulmasını sağlamalıdır.

İlgili konular