在java中普通对象的对象头信息
其中Mark Word结构
我们在加了重量级锁synchronize后,对象头的mark word会指向一个monitor,monitor是操作系统层面的c语言与java无关,如果此时monitor中没有owner,那么当前线程执行,如果已经有owner那么当前线程记录在monitor中的EntryList中阻塞等待,
等待owner释放后,抢夺成为owner;
案例
public class Monitor_Test {static final Object lock = new Object();static int counter;public static void main(String[] args) {synchronized (lock){counter++;}}
}
编译
monitorenter将对象头的mark word存储monitor指针;
monitorexit释放monitor指针,还原mark word保存的分代年龄和hash;
goto24即return本该结束,但是如果代码出现异常,没有正常执行?
19行到23行处理异常,athrow抛出;
上一篇:C++ 结构体
下一篇:从0开始学python -52