偏向锁是为了解决轻量锁锁记录和对象头markword中的cas性能开销过大的问题,特别是在重入的时候会出现这样的现象。 对于如下的所示的代码:m1方法里面调用m2方法,m2方法调用m3方法,这时只有一个线程,本来可以使用轻量级锁,但是jvm底层还会对轻量级锁进行优化,也就是偏向锁。 在对象头中的markword中存储的就是偏向锁的信息,也就是线程ID等信息,在 java对象头的结构 这篇文章中有偏向锁的结构。在重入的时候,线程发现对象头中的thread是自己,就表示没有竞争,不用重新CAS,这个对象就归该线程所有。