JavaSE7のString Hashの新しい実装 (alternative hash for String keys)

Java絡みで覚えておきたいことがでたので久々に更新してみようかな、と。
Java7の備忘録ということで。

Map操作パフォーマンス向上のために、Stringのハッシュ計算に新しいロジックが入ったらしい
ただ、現在その設定はデフォルト無効になっている。
次のシステムプロパティの値でコントロールする。
jdk.map.althashing.threshold
値の意味は、新しいロジックを使いはじめるMapのキャパシティなんだそうな。
-1が無効で、0にしたら常に使うし、512にしたらエントリが512を超えたら使う。

基本的にエントリが多くなった時の、ハッシュの衝突を避けるという目的があるらしいので
エントリ数が大きいMapを使っている時に有効な改善が入っているらしい。

使い道を考えたけど、文字列IDをキーにしてオブジェクトをキャッシュするようなキャッシュ的な用途で効くのかな、と。
注意点としては、ハッシュの値が変わるのでイテレータの列挙順序が変わるとのこと(順序を保証しないクラスは)。
順序に依存したコードなんてそもそも書いちゃダメだけど気をつけろ、と。
体感することはないと思うけど、しばらく有効にして使ってみるつもり。


投稿日

カテゴリー:

投稿者:

タグ:

コメント

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください