biased object是偏向锁定的结果。这个功能获得了专利,自HotSpot 6开始引入,用来降低对象锁定带来的开销。由于具体实现依赖CPU原子指令(CAS),因此对来自不同线程的对象安全地进行锁定和解锁开销很大。据观察,大部分应用程序中,多数对象仅被一个线程锁定,因此采用原子操作是一种浪费。为了避免这种情况,JVM采取偏向锁,即允许线程尝试让对象“偏向”自己。当对象处于已偏向状态,这个幸运的线程可以无需原子指令完成对象锁定与解锁。只要没有线程争用相同的对象,这种方案就可以提高性能。 这样就可以解释FastHashCode实现为什么变得如此复杂。对象头不仅包含了identity hash code,还包含锁定状态,比如指向加锁线程的指针。 这里只是撤销了现有的偏向状态,并禁用对象的偏向锁(false表示“不再尝试为对象设置偏向”) 这意味着获取对象identity hash code将禁用偏向锁,反过来会让锁定对象采用原子指令,进而增大开销。即使只有一个线程也是如此。
标签:开销,对象,原子,线程,锁定,偏向 From: https://www.cnblogs.com/silyvin/p/18254704