StringのhashCode()が0をキャッシュしないのはなぜですか?

polygenelubricants:

StringのJava 6ソースコードで、hashCodeが0以外の値しかキャッシュしないことに気付きました。パフォーマンスの違いは、次のスニペットによって示されます。

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());
   }
}

ideone.comでこれを実行すると、次の出力が得られます。

Took 1470 ms.
Took 58 ms.

だから私の質問は:

  • StringのhashCode()が0をキャッシュしないのはなぜですか?
  • Java文字列が0にハッシュされる確率はどれくらいですか?
  • 0にハッシュする文字列について、毎回ハッシュ値を再計算するというパフォーマンス上のペナルティを回避する最良の方法は何ですか?
  • これは値をキャッシュする最良の方法ですか?(つまり、1つを除くすべてをキャッシュしますか?)

あなたの娯楽のために、ここの各行は0にハッシュする文字列です:

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.
ケビン・ボリリオン:

あなたは何も心配していません。この問題について考える方法は次のとおりです。

あなたが一年中文字列のハッシュを囲んでいるだけのアプリケーションがあるとします。1000の文字列をすべてメモリ内で受け取り、それらに対してhashCode()をラウンドロビン方式で繰り返し、100万回呼び出し、その後、さらに1000の新しい文字列を取得して再度実行するとします。

また、文字列のハッシュコードがゼロになる可能性が、実際には1/2 ^ 32よりはるかに大きいと仮定します。私は確かにそれはあるよいくぶん 16 32 ^ 2/1より大きく、しかし、のは、それはそれよりも多くの悪いことだとしましょう、1月2日のような^(平方根!今たくさん悪いことだということ!)。

この状況では、これらの文字列のハッシュコードが他の誰よりもキャッシュされる方法を改善するOracleのエンジニアから多くのメリットを得られます。それで、あなたは彼らに手紙を書いて、彼らにそれを修正するように頼みます。そして、s.hashCode()がゼロのときはいつでも瞬時に戻るように魔法をかけます(初めてでも100%改善されます!)。そして、他のケースではパフォーマンスをまったく低下させることなくこれを行うとしましょう。

やったー!これであなたのアプリは...見てみましょう... 0.0015%速くなりました!

以前は丸一日かかっていたものが、今では23時間57分48秒しかかかりません。

そして、多くの場合滑稽な程度で、疑いのすべての可能な利益を与えるようにシナリオを設定しました。

これはあなたにとって価値があるように見えますか?

編集:これを数時間前に投稿して以来、私はプロセッサの1つにハッシュコードがゼロの2ワードフレーズを探してワイルドに実行させました。これまでに考え出されたのは、ベゾトルゾリージョ、クロノグラムミックシュトフ、破壊的な回廊のようなもの、クレアシャクオーガンジン、ドラムウッドボールダーヘッド、電気分析のエクササイズ可能、そして非常に複雑なものです。これは約2 ^ 35の可能性から外れているため、完全な分布で​​は8しか表示されないと予想されます。明らかに、それが完了するまでに、その数は数倍になりますが、それ以上に風変わりではありません。さらに重要なことは、いくつかの興味深いバンド名/アルバム名が思いついたことです!公正な盗難はありません!

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

キャッシュ制御が機能しないのはなぜですか?

分類Dev

CDNが特定のドキュメントをキャッシュするのに、ブラウザがキャッシュしないのはなぜですか?

分類Dev

Google Cloud Storageが正しいキャッシュヘッダーを送信しないのはなぜですか?

分類Dev

Doubledocのjava.valueofが値をキャッシュするのにキャッシュしないと言うのはなぜですか?

分類Dev

perfがキャッシュミスを報告しないのはなぜですか?

分類Dev

Chromeが動的フォームフィールドをキャッシュしないのはなぜですか?

分類Dev

ChromiumがDNSを1分以上キャッシュしないのはなぜですか?

分類Dev

ブラウザが画像をキャッシュしないのはなぜですか?

分類Dev

Class.getSimpleName()がキャッシュされないのはなぜですか?

分類Dev

整数がJavaにキャッシュされないのはなぜですか?

分類Dev

QueryCacheを使用してqueryClient.prefetchQueryから「キャッシュ」を取得できないのはなぜですか

分類Dev

ASP.NET MVC 4アプリで出力キャッシュが機能しないのはなぜですか?

分類Dev

キャッシュ設定がないのに、CloudFrontがs3オブジェクトをキャッシュするのはなぜですか?

分類Dev

AJAXの結果がETagキャッシュされない(If-None-Matchがない)のはなぜですか?

分類Dev

第2レベルのキャッシュ-すべてのエンティティをキャッシュしないのはなぜですか?

分類Dev

aptキャッシュで「git」を検索するヒットが非常に多いのはなぜですか?

分類Dev

通常のメソッドで作業しているときにfunctools.lru_cacheが__call__をキャッシュしないのはなぜですか

分類Dev

Groovyが私のinstanceofをキャッチしないのはなぜですか?

分類Dev

`catch`がこの例外をキャッチしないのはなぜですか?

分類Dev

MySQLがこの単純なクエリを最適化せず、キャッシュから結果を提供しないのはなぜですか?

分類Dev

なぜGoogle Chromeは履歴を検索キャッシュしないのですか?

分類Dev

クエリをキャッシュすると、関係がキャッシュされないのはなぜですか?

分類Dev

一部のキャッシュがドロップできないのはなぜですか?

分類Dev

SQLExceptionがSQLiteExcpetionをキャッチしないのはなぜですか?

分類Dev

コードが例外をキャッチしないのはなぜですか?

分類Dev

Catchがエラーをキャッチしないのはなぜですか?

分類Dev

Flutter NotificationListenerが通知をキャッチしないのはなぜですか?

分類Dev

Javaで整数キャッシュが高速になるのはなぜですか?

分類Dev

「通常のリロード」を実行するときに、Chromeがメモリ内キャッシュを再検証しないのはなぜですか?

Related 関連記事

  1. 1

    キャッシュ制御が機能しないのはなぜですか?

  2. 2

    CDNが特定のドキュメントをキャッシュするのに、ブラウザがキャッシュしないのはなぜですか?

  3. 3

    Google Cloud Storageが正しいキャッシュヘッダーを送信しないのはなぜですか?

  4. 4

    Doubledocのjava.valueofが値をキャッシュするのにキャッシュしないと言うのはなぜですか?

  5. 5

    perfがキャッシュミスを報告しないのはなぜですか?

  6. 6

    Chromeが動的フォームフィールドをキャッシュしないのはなぜですか?

  7. 7

    ChromiumがDNSを1分以上キャッシュしないのはなぜですか?

  8. 8

    ブラウザが画像をキャッシュしないのはなぜですか?

  9. 9

    Class.getSimpleName()がキャッシュされないのはなぜですか?

  10. 10

    整数がJavaにキャッシュされないのはなぜですか?

  11. 11

    QueryCacheを使用してqueryClient.prefetchQueryから「キャッシュ」を取得できないのはなぜですか

  12. 12

    ASP.NET MVC 4アプリで出力キャッシュが機能しないのはなぜですか?

  13. 13

    キャッシュ設定がないのに、CloudFrontがs3オブジェクトをキャッシュするのはなぜですか?

  14. 14

    AJAXの結果がETagキャッシュされない(If-None-Matchがない)のはなぜですか?

  15. 15

    第2レベルのキャッシュ-すべてのエンティティをキャッシュしないのはなぜですか?

  16. 16

    aptキャッシュで「git」を検索するヒットが非常に多いのはなぜですか?

  17. 17

    通常のメソッドで作業しているときにfunctools.lru_cacheが__call__をキャッシュしないのはなぜですか

  18. 18

    Groovyが私のinstanceofをキャッチしないのはなぜですか?

  19. 19

    `catch`がこの例外をキャッチしないのはなぜですか?

  20. 20

    MySQLがこの単純なクエリを最適化せず、キャッシュから結果を提供しないのはなぜですか?

  21. 21

    なぜGoogle Chromeは履歴を検索キャッシュしないのですか?

  22. 22

    クエリをキャッシュすると、関係がキャッシュされないのはなぜですか?

  23. 23

    一部のキャッシュがドロップできないのはなぜですか?

  24. 24

    SQLExceptionがSQLiteExcpetionをキャッチしないのはなぜですか?

  25. 25

    コードが例外をキャッチしないのはなぜですか?

  26. 26

    Catchがエラーをキャッチしないのはなぜですか?

  27. 27

    Flutter NotificationListenerが通知をキャッチしないのはなぜですか?

  28. 28

    Javaで整数キャッシュが高速になるのはなぜですか?

  29. 29

    「通常のリロード」を実行するときに、Chromeがメモリ内キャッシュを再検証しないのはなぜですか?

ホットタグ

アーカイブ