SORU
22 ŞUBAT 2010, PAZARTESİ


Neden yok'String'In hashCode() 0 cache?

HashCode sadece önbelleğe 0'dan farklı değerleri için bu Dizeyi Java 6 kaynak kodu fark ettim. Performans farkı aşağıdaki kod tarafından sergilendi

public class Main{
   static void test(String s) {
      long start = System.currentTimeMillis();
      for (int i = 0; i < 10000000; i  ) {
         s.hashCode();
      }
      System.out.format("Took %d ms.%n", System.currentTimeMillis() - start);
   }
   public static void main(String[] args) {
      String z = "Allocator redistricts; strict allocator redistricts strictly.";
      test(z);
      test(z.toUpperCase());
   }
}

Running this in ideone.com aşağıdaki çıktıyı verir:

Took 1470 ms.
Took 58 ms.

Bu yüzden benim sorular şunlardır:

  • Neden String. hashCode yok() 0 cache?
  • Java dize 0 karma olasılık nedir?
  • 0 karma dizeleri için karma bir değer her zaman yeniden performans ceza önlemek için en iyi yolu nedir?
  • Bu önbellekleme değerleri en iyi uygulama yoludur? (yani biri hariç tüm önbellek?)

Eğlence için, her satırı burada 0 karma bir dize

pollinating sandboxes
amusement & hemophilias
schoolworks = perversive
electrolysissweeteners.net
constitutionalunstableness.net
grinnerslaphappier.org
BLEACHINGFEMININELY.NET
WWW.BUMRACEGOERS.ORG
WWW.RACCOONPRUDENTIALS.NET
Microcomputers: the unredeemed lollipop...
Incentively, my dear, I don't tessellate a derangement.
A person who never yodelled an apology, never preened vocalizing transsexuals.

CEVAP
22 ŞUBAT 2010, PAZARTESİ


Dert ettiğin şeye bak. İşte bu sorun hakkında düşünmek için bir yol.

Hiçbir şey yapmaz bir uygulama var ama karma Dizeleri etrafında tüm yıl boyunca oturup düşünelim. Diyelim sürer bin dizeleri, hafıza, çağrı hashCode() onları tekrar tekrar yuvarlak robin moda, bir milyon kez, sonra alır başka bir bin yeni dizeler ve yine başardı.

Ve bir dize karma kodu sıfır olma olasılığı, aslında, 1/2^32'den çok daha büyük olduğunu varsayalım. Eminim öyledirbiraz1/2^32, daha büyük ama çok daha kötü olduğunu söylüyor, 1/2^16 (Karekök gibi! çok daha kötü! şimdi).

Bu durumda, Oracle mühendisleri faydalanmak için daha ne kadar bu dizeleri iyileştirilmesi " hash kodları herkesten önbelleğe yaşıyor. Bunları yazmak ve bunu düzeltmek istiyoruz. Ve ne zaman s böylece onların sihirli çalışır.() hashCode sıfır döndürüranında(hatta ilk kez! 100% iyileşme!). Ve başka bir dava için hiç de onur kırıcı bir performans olmadan bu yaptıklarını söylüyorlar.

Yaşasın! Şimdi app... hadi... 0.0015% daha hızlı bakın!

Bütün gün " şimdi ne kullanılan alır sadece 23 saat, 57 dakika ve 48 saniye!

Ve unutmayın, hiç şüphesiz, mümkün olan her yardımı, genellikle gülünç bir derece vermek için senaryoyu kurduk.

Bu senin için buna değer mi görünüyor?

DÜZENLEME:birkaç saat önce bu mesaj bu yana, benim işlemci vahşi bir sıfır hash kodları ile iki-kelime öbekleri aramaya çalışmasına izin verdim. Olan oldu şimdiye kadar: bequirtle zorillo, schtoff, contusive cloisterlike, creashaks organzine, drumwood boulderhead, electroanalytic azınlık ve favosely nonconstruable chronogrammic. Bu 2^35 olanakları hakkında değil, mükemmel bir dağıtım ile sadece 8 görmeyi beklediğiniz. Açıkçası bu zamana kadar bir kaç kez çok, ama daha fazla değil outlandishly zorundayız bitti. Daha önemli olanı şimdi ilginç grup isimleri/albüm isimleri bir kaç fikrim var. Hiç adil çalmak!

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Jeremy Gallman

    Jeremy Gallm

    11 NİSAN 2012
  • krotoflik

    krotoflik

    26 ŞUBAT 2011
  • The Amazing Atheist

    The Amazing

    20 Kasım 2006