美文网首页
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