在Java中同步是由JVM层实现的锁,锁的实现由Java层完全实现。在JDK 1.5之前,使用重量级锁实现同步,并且效率相对较低。锁定效率类似于锁定。
以下简单的演示显示显示以下内容
上述演示的字节代码如下。您可以看到,与同步关键字相对应的代码锁包含相应的字节代码,以启动之前嵌入监视器,并且末尾嵌入了monitorexit指令。
MonitorEnter和MonitoreXIT指令如何工作?如果您想弄清楚这个问题,您仍然必须了解必须配对Java(基于64 -PIT操作系统)
对象头中的标记字中的锁定徽标是对象锁定的状态,如上图所示。
由于JDK1.5,JVM已经优化了同步,因此如何优化到现在与Reentrantlock性能几乎相同,因此请低头。
以下是MonitorEnter和Monitorexit指令的相应代码的位置:src/hotspot/share/internerter/dignserruntime.cpp
从上面,MonitorEnter指令是调用Objectsynchronizer :: Enter锁定。相应的源代码位置是src/hotspot/share/runtime/synchronizer.cpp。首先,查看Enter锁定的方法:1。确定是否打开偏置锁定,handle_sync_onals_valsprocessing偏向锁处理;2.如果对象头中的标记字中没有锁定,请首先将对象头标记字复制到当前线程中锁定记录的位置。通过锁定堆栈中锁定记录的位置;3.如果标记已锁定在对象头中,则扩展通过膨胀扩展,并尝试重量级锁(即使使用对象monitor锁定)。
如今,对Java中同步关键字的基本原理的分析,JDK的锁定优化原理不是锁定 - > bias lock lock->轻量级锁(CAS) - > opectMonitor(OjectMonitor)(OPENTMONITOR)有一个明确的理解。
作者:XJZ1842&Nuggets版权属于作者。