This is possible because the 32-bit JVM object contains 4 bytes of the label header and 4 bytes of the class reference. Header markers contain different information depending on the type of object (bit sizes):
normal objects → unused: 25 hash: 31 cms_free: 1 age: 4 biased_lock: 1 lock: 2
→ JavaThread *: 54 epoch: 2 cms_free: 1 age: 4 biased_lock: 1 lock: 2