美文网首页
Synchronized实现过程

Synchronized实现过程

作者: CodeYang | 来源:发表于2022-10-26 07:01 被阅读0次

以下截图及相关信息,均来源于马士兵公开课中


Synchronized 实现过程:

  1. Java代码层面:添加 synchronized 关键字

  2. Java字节码层面:监视器 moniterenter 、 moniterexit

  3. 执行过程中自动升级

  4. lock comxchg

Synchronized 最底层实现

JIT (Just In Time Compiler ) 即时编译

首先了解一下 JVM 的即时编译,对于热点代码直接编译成机器语言,提高效率。
JIT 会把热点代码编译成汇编语言

public class T2 {
    public static void main(String[] args) {
        for (int i = 0; i < 1000000; i++) {
            m();
            n();
        }
    }
    
    public static synchronized void m(){

    }

    public static void n(){

    }
}

m() , n() 执行了一百万次,所以这两个方法在这个程序中就叫热点代码,把热点代码进行即时编译,编译成机器语言,到第10次编译成机器语言了,可能到第11次执行的时候就不再重新解释了,就直接执行了,效率会高很多。

通过命令查看:

java -XX:+UnlockDiagnosticVMOptions -XX:PrintAssembly T2

C1 Compile Level 1 (一级优化)

C2 Compile Level 2 (二级优化)

JIT 会把 m(),n() 编译成汇编码,会看到 lock comxchg ....指令。

相关文章

网友评论

      本文标题:Synchronized实现过程

      本文链接:https://www.haomeiwen.com/subject/yzqozrtx.html