Đối với HotSpot:
Phần header đối tượng bao gồm một từ nhãn hiệu và một con trỏ klass.
Các dấu chữ có kích thước từ (4 byte
trên 32 bit kiến trúc, 8 byte
trên 64 bit, kiến trúc) và
các klass con trỏ có kích thước từ trên 32 bit
kiến trúc. Trên 64 bit
kiến trúc con trỏ klass có kích thước chữ, nhưng cũng có thể có 4 byte
nếu địa chỉ heap có thể được mã hóa trong các 4 bytes
này.
Tối ưu hóa này được gọi là "oops nén" và bạn cũng có thể kiểm soát nó bằng tùy chọn UseCompressedOops
.
Bạn cũng có thể tìm thấy mục nhập wiki về số 1 này.
từ đánh dấu thực sự được sử dụng cho nhiều thứ.
- Một là
Biased Locking
2 thông qua đó HotSpot có thể triển khai khóa hiệu quả.
- Nó cũng được sử dụng trong
GC to set forward pointers
và to store the age of the objects
. Mã băm nhận dạng của một đối tượng có thể được lưu trữ bên trong dấu (số System.identityHashCode
/Object.hashCode
).
Có một bình luận trong mã nguồn của markOop.hpp mô tả cách bố trí tùy thuộc vào kiến trúc:
// 32 bits:
// --------
// hash:25 ------------>| age:4 biased_lock:1 lock:2 (normal object)
// JavaThread*:23 epoch:2 age:4 biased_lock:1 lock:2 (biased object)
// size:32 ------------------------------------------>| (CMS free block)
// PromotedObject*:29 ---------->| promo_bits:3 ----->| (CMS promoted object)
//
// 64 bits:
// --------
// unused:25 hash:31 -->| unused:1 age:4 biased_lock:1 lock:2 (normal object)
// JavaThread*:54 epoch:2 unused:1 age:4 biased_lock:1 lock:2 (biased object)
// PromotedObject*:61 --------------------->| promo_bits:3 ----->| (CMS promoted object)
// size:64 ----------------------------------------------------->| (CMS free block)
//
// unused:25 hash:31 -->| cms_free:1 age:4 biased_lock:1 lock:2 (COOPs && normal object)
// JavaThread*:54 epoch:2 cms_free:1 age:4 biased_lock:1 lock:2 (COOPs && biased object)
// narrowOop:32 unused:24 cms_free:1 unused:4 promo_bits:3 ----->| (COOPs && CMS promoted object)
// unused:21 size:35 -->| cms_free:1 unused:7 ------------------>| (COOPs && CMS free block)
Bạn cũng có thể tìm ra oop phần đầu tập tin here.
"oop" là viết tắt của * con trỏ đối tượng bình thường * – user2418306