Monitor对象头
在java中普通对象的对象头信息

- Mark Word记录分代年龄、加锁的状态;
 - Klass Word指向类对象的指针;
 
其中Mark Word结构

monitor执行原理
我们在加了重量级锁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抛出;



















![[2.2.2]进程调度的时机、方式、切换与过程](https://img-blog.csdnimg.cn/img_convert/893c90ca9af749822003a14a77822810.png)