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.
だから私の質問は:
あなたの娯楽のために、ここの各行は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]
コメントを追加