Java'nın karma tuşları here
rasgeleleştirme yaklaşımı hakkında okumuştum. Görünüşe göre bu fikir, alt bitlerin dağıtıma yardımcı olmak için "rastgele" olduklarından emin olmaktır ancak bunu daha fazla anlamaya çalışıyorum.
Yani 10 nolu bir tablomuz varsa, o zaman 0, 10, 20, 30, 40 vb. Sayıların tümü kova 0'a düşer, 1,11,21,31 sayıları kepçeye 1 vs. düşer (modulo 10 kullanarak) .
Bit desenlerini değiştirmek, bunların tümünü kova 0'a gitmek yerine farklı kovalara yönlendirebilirsiniz.
Ancak, net olmayan şey, düşük sipariş bitlerinin bunu etkilemesini sağlayan özelliktir ve rastgele hale getirmemiz gerekir. onlar. Yani elimizde:Çarpışmaya neden olan bit modelinin özelliği nedir?
0000 0000 (0)
0000 1010 (10)
0001 0100 (20)
0001 1110 (30)
0010 1000 (40)
aynı yuvaya yerleştirilen bunları yapar düşük değerli bitlerden düzenlilik nedir?
Belki de aşağıda kafam karıştı mı? Anlayışım, çarpışmalara neden olan düşük sıralı bitlerde bir düzenlilik olduğunu ve
: İşte OpenJDK en HashMap uygulamasından bir alıntı kova sayısı her zaman 2 nin kuvveti, bütün karmaları 8 ile bölünebilir olması nerede 'karma uygulamaları için ..ama çoğu kovanın boş olduğu anlamına gelir. 8 nedir? Adresin büyüklüğü mü? Ve neden 2'nin gücü için oluyor? Biraz daha detaylandırır mısınız lütfen? – Jim
@Jim: 8, tipik donanım hizalamasının (bir örneğidir): neredeyse tüm nesnelerin 8 ile bölünebilir adresleri vardır, çünkü CPU, tek bir erişimde sekiz hizalanmış baytı okuyabilir (ancak nesne sınırın üzerine bölünmüşse, iki bellek erişimi). Ve eğer sekiz modulo tarafından bölünebilen bir sayıyı 2'lik bir güce düşürürseniz, sekiz tarafından bölünebilen bir değerle sonuçlanırsınız, bu yüzden her sekiz kovadan yedi tanesi kullanılmayacaktır. – rici