`hashCode()` メソッドがオーバーライドされていない場合、Java ではどのように動作しますか?

Barbara Streisand
リリース: 2024-11-03 00:36:02
オリジナル
879 人が閲覧しました

How does the `hashCode()` method behave in Java when it's not overridden?

Java のオブジェクト ハッシュ コードのデフォルト動作

Java オブジェクトで hashCode() メソッドが明示的にオーバーライドされていない場合、hashCode() を呼び出します。そのオブジェクトに対する実行は、Java 仮想マシン (JVM) の実装に基づいて特定の結果を生成します。

HotSpot JVM のデフォルトの動作

HotSpot JVM では、デフォルトの動作が

  • 最初の呼び出し: 乱数が生成され、オブジェクト ヘッダーに保存されます。
  • 後続の呼び出し:乱数はオブジェクト ヘッダーから抽出されます。

デフォルトでは、この乱数はオブジェクトの内容や場所と相関関係がありません。

カスタマイズ可能な動作

hashCode() メソッドの動作は、-XX:hashCode=n HotSpot JVM オプションを使用してカスタマイズできます。このオプションは次の値を取ります:

  • 0: グローバルランダムジェネレーター (Java 7 のデフォルト)
  • 5: スレッドローカル xor-shift ランダムジェネレーター (Java 8 のデフォルト)
  • 1: ランダムな値と混合されたオブジェクト ポインター (stop-the-world イベント間で安定)
  • 2: 常に 1
  • 3: 自動インクリメントされる数値
  • 4: オブジェクト ポインタは 32 ビットにトリミングされます

特別な考慮事項

  • -XX:hashCode=4 であっても、ハッシュ コードが常に指すとは限りませんオブジェクトのアドレスに。オブジェクトは作成後に移動できますが、ハッシュ コードは変更されません。
  • オブジェクト アドレスの分散が不十分な可能性があり、-XX:hashCode=4 オプションを使用するとハッシュ テーブルのバランスが崩れる可能性があります。

以上が`hashCode()` メソッドがオーバーライドされていない場合、Java ではどのように動作しますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート