首頁  >  文章  >  Java  >  當「hashCode()」未被重寫時,Java 如何產生雜湊碼?

當「hashCode()」未被重寫時,Java 如何產生雜湊碼?

Mary-Kate Olsen
Mary-Kate Olsen原創
2024-10-31 21:17:02438瀏覽

How Does Java Generate Hash Codes When `hashCode()` is Not Overridden?

Java 中的預設雜湊程式碼行為

如果hashCode() 方法未被重寫,則在Java 中的物件上呼叫它會產生一個系統-產生的雜湊碼。

底層機制

在HotSpot JVM 中,hashCode 通常由下列方法之一決定:

  • 隨機數(Java 7 中的預設值): 產生隨機數字並將其儲存在物件頭中。這種預設方法在高並發環境中引入了競爭條件或延遲的可能性。
  • 執行緒本地隨機產生器(Java 8 中的預設值): 執行緒本地隨機產生器用於避免競爭條件並提高效能。
  • 物件指標:物件指標與隨機值混合以產生雜湊碼。但是,此方法可能會導致哈希表分佈不佳。

可控制行為

可以使用 -XX 修改雜湊程式碼產生的行為: hashCode=n HotSpot JVM 選項。可用值如下:

    0(Java 7 中的預設值):全域隨機產生器
  • 5(Java 8 中的預設值):執行緒本地異或移位隨機生成器
  • 1:物件指標與隨機值混合
  • 2:總是1
  • 3:自動遞增數字
  • 4:物件指標修剪為32 位元
需要注意的是,即使使用-XX:hashCode=4 選項,由於潛在的物件移動,雜湊碼也可能不會總是對應於物件位址。

以上是當「hashCode()」未被重寫時,Java 如何產生雜湊碼?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn