一个对象创建时,
如果开启了偏向锁(默认开启),那么对象创建后,markword值为0x05即最后3位101,这时它的Thread,epoch,age都为0偏向锁默认是延迟的,不会在程序启动时立即生效,如果想避免延迟,可以加VM参数-xx:BiaseLockingStartupDelay=0来禁用延迟如果没有开启偏向锁,那么对象创建后,markword值为0x01即最后3位位001,这时它的hashcode,age,都为0,第一次用到hashcode时才会赋值偏向锁的延迟启动时间偏向锁默认是在JVM启动4s后再初始化偏向锁,可用如下参数修改启动时间,设为0则表示立即启用。之所以这么设计是因为JVM启动的时候,如果立即启动偏向,有可能会因为线程竞争太激烈导致产生太多安全点挂起。
-XX:BiasedLockingStartupDelay=0