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中文網其他相關文章!