Navigation Menu

Skip to content

Instantly share code, notes, and snippets.

@arturmkrtchyan
Last active April 8, 2024 02:03
Show Gist options
  • Star 85 You must be signed in to star a gist
  • Fork 37 You must be signed in to fork a gist
  • Save arturmkrtchyan/43d6135e8a15798cc46c to your computer and use it in GitHub Desktop.
Save arturmkrtchyan/43d6135e8a15798cc46c to your computer and use it in GitHub Desktop.
Java Object Header
|----------------------------------------------------------------------------------------|--------------------|
| Object Header (64 bits) | State |
|-------------------------------------------------------|--------------------------------|--------------------|
| Mark Word (32 bits) | Klass Word (32 bits) | |
|-------------------------------------------------------|--------------------------------|--------------------|
| identity_hashcode:25 | age:4 | biased_lock:1 | lock:2 | OOP to metadata object | Normal |
|-------------------------------------------------------|--------------------------------|--------------------|
| thread:23 | epoch:2 | age:4 | biased_lock:1 | lock:2 | OOP to metadata object | Biased |
|-------------------------------------------------------|--------------------------------|--------------------|
| ptr_to_lock_record:30 | lock:2 | OOP to metadata object | Lightweight Locked |
|-------------------------------------------------------|--------------------------------|--------------------|
| ptr_to_heavyweight_monitor:30 | lock:2 | OOP to metadata object | Heavyweight Locked |
|-------------------------------------------------------|--------------------------------|--------------------|
| | lock:2 | OOP to metadata object | Marked for GC |
|-------------------------------------------------------|--------------------------------|--------------------|
|------------------------------------------------------------------------------------------------------------|--------------------|
| Object Header (128 bits) | State |
|------------------------------------------------------------------------------|-----------------------------|--------------------|
| Mark Word (64 bits) | Klass Word (64 bits) | |
|------------------------------------------------------------------------------|-----------------------------|--------------------|
| unused:25 | identity_hashcode:31 | unused:1 | age:4 | biased_lock:1 | lock:2 | OOP to metadata object | Normal |
|------------------------------------------------------------------------------|-----------------------------|--------------------|
| thread:54 | epoch:2 | unused:1 | age:4 | biased_lock:1 | lock:2 | OOP to metadata object | Biased |
|------------------------------------------------------------------------------|-----------------------------|--------------------|
| ptr_to_lock_record:62 | lock:2 | OOP to metadata object | Lightweight Locked |
|------------------------------------------------------------------------------|-----------------------------|--------------------|
| ptr_to_heavyweight_monitor:62 | lock:2 | OOP to metadata object | Heavyweight Locked |
|------------------------------------------------------------------------------|-----------------------------|--------------------|
| | lock:2 | OOP to metadata object | Marked for GC |
|------------------------------------------------------------------------------|-----------------------------|--------------------|
|--------------------------------------------------------------------------------------------------------------|--------------------|
| Object Header (96 bits) | State |
|--------------------------------------------------------------------------------|-----------------------------|--------------------|
| Mark Word (64 bits) | Klass Word (32 bits) | |
|--------------------------------------------------------------------------------|-----------------------------|--------------------|
| unused:25 | identity_hashcode:31 | cms_free:1 | age:4 | biased_lock:1 | lock:2 | OOP to metadata object | Normal |
|--------------------------------------------------------------------------------|-----------------------------|--------------------|
| thread:54 | epoch:2 | cms_free:1 | age:4 | biased_lock:1 | lock:2 | OOP to metadata object | Biased |
|--------------------------------------------------------------------------------|-----------------------------|--------------------|
| ptr_to_lock_record | lock:2 | OOP to metadata object | Lightweight Locked |
|--------------------------------------------------------------------------------|-----------------------------|--------------------|
| ptr_to_heavyweight_monitor | lock:2 | OOP to metadata object | Heavyweight Locked |
|--------------------------------------------------------------------------------|-----------------------------|--------------------|
| | lock:2 | OOP to metadata object | Marked for GC |
|--------------------------------------------------------------------------------|-----------------------------|--------------------|
@tianshuang
Copy link

Awesome !

@duqicauc
Copy link

非常好

@soyona
Copy link

soyona commented Jul 16, 2018

Awesome!!!

@turf00
Copy link

turf00 commented Aug 20, 2018

Magic thanks!

@qeesung
Copy link

qeesung commented Nov 13, 2018

Awesome!!! Thx :-)

@neuSnail
Copy link

neuSnail commented Apr 4, 2019

thanks �a lot , this is the most clear form I have ever seen especially for 64-bit

@Mehraj123
Copy link

Love it

@plotor
Copy link

plotor commented Jun 29, 2019

Nice~

@kaiattrib
Copy link

thanks 😆

@cjwk
Copy link

cjwk commented Dec 16, 2019

Love it

@eunrui
Copy link

eunrui commented Jun 2, 2020

Thanks!

@ethan-lau
Copy link

thanks

@WillfordZhan
Copy link

Thanks!

@stardustman
Copy link

Thanks

@lgqaozora
Copy link

Thanks!!

Copy link

ghost commented Jun 11, 2021

Awesome ~~~

@strogiyotec
Copy link

Why hashcode takes 31 bite ? Hashcode in Java is an int which is 4 bytes or 32 bits . Did I miss something ?

@tianshuang
Copy link

Your previous blog can’t be accessed. I bookmarked your article before, address: http://arturmkrtchyan.com/java-object-header.

@stardustman
Copy link

is multi-byte value use little-endian?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment