2013-02-05 30 views
9

Theo như tôi biết mã băm của một đối tượng thường được lưu trữ trong từ tiêu đề của đối tượng, trong đó, ví dụ, có thể bố trí sau đây trong HotSpot:Mã băm của đối tượng được lưu trữ ở đâu nếu khóa thiên vị được bật trong HotSpot JVM?

| hash code | age | 0 | 01 |

Theo HotSpotInternals - Synchronization với khóa sai lệch kích hoạt bố cục từ tiêu đề trông giống như sau:

| 0 |epoch| age | 0 | 01 |

Khi nào mã băm thực sự được lưu nếu cần khi bật khóa thiên vị?

Trả lời

8

Hiểu biết của tôi là yêu cầu mã băm (nhận dạng) ngăn chặn khóa thiên vị - vì chúng tôi không thể lưu trữ cả mã băm và id chủ đề trong từ đánh dấu. Nếu bạn yêu cầu hashcode của mutex bạn chuyển sang chế độ khóa không thiên vị.

này được hỗ trợ bởi những sản phẩm sau được lấy từ this blog:

"Cuối cùng, không có hiện không gian trong từ dấu để hỗ trợ cả hai giá trị bản sắc hashCode() cũng như thread ID cần thiết cho việc mã hóa khóa thiên vị Cho rằng, bạn có thể tránh khóa thiên vị trên cơ sở mỗi đối tượng bằng cách gọi System.identityHashCode(o).Nếu đối tượng đã bị thiên vị, việc gán một hashCode nhận dạng sẽ dẫn đến thu hồi, nếu không, việc gán một hashCode() sẽ làm cho đối tượng không đủ điều kiện Tài sản này là một tạo tác của việc thực hiện hiện tại của chúng tôi, tất nhiên. "

+0

Điều này có vẻ là trường hợp ít nhất trong OpenJDK xem mã nguồn: http://hg.openjdk.java.net/jdk8u/jdk8u/hotspot/file/87ee5ee27509/src/share/vm/runtime /synchronizer.cpp#l601 –

Các vấn đề liên quan