码迷,mamicode.com
首页 > 其他好文 > 详细

?Synchronized底层实现---偏向锁

时间:2020-07-29 12:44:29      阅读:63      评论:0      收藏:0      [点我收藏+]

标签:逻辑   正是   com   编译   hotspot   --   参数   tab   一个   

偏向锁入口

synchronized分为synchronized代码块和synchronized方法,其底层获取锁的逻辑都是一样的。

要找到锁的入口,就要找到代码中对monitorenter指令解析的地方。在HotSpot中有两处对monitorenter进行了解析:一个是在bytecodeInterpreter.cpp#1816 ,另一个是在templateTable_x86_64.cpp#3667。

  • bytecodeInterpreter是JVM中的字节码解释器,用C++实现了每一条jvm指令,如monitorenter,其优点是实现简单且比较容易理解,缺点是执行慢,后者是模板解析器templateInterpreter,他对每个指令都写了一段对应的汇编语言,启动时将每个指令和对应的汇编语言入口绑定,可以说将效率做到了极致,参考文章。在HotSpot中,只用到了模板解释器,所以,monitorenter的解析入口在

HotSpot

在HotSpot中,实现了两种具体的解释器,即模板解释器和C++解释器,它们分别由TemplateInterpreter子模块和CppInterpreter子模块实现。其中,模板解释器正是目前HotSpot的默认解释器.另外就是其实HotSpot从一开始就有模板解释器,而C++解释器反而是后来加进来的。前者源于HotSpot的前身Strongtalk,而后者源于Sun的另一个JVM——CVM,又名“CDC HotSpot Implementation”或者“CDC-HI”。CVM更早的前身是Sun的Classic VM。
也就是说,这俩解释器没有任何血缘关系,前者并非将后者翻译为汇编。当时Sun之所以把后者加到HotSpot是在实现Itanium(IA-64)的移植时想偷懒,人肉写Itanium汇编挺烦的所以要实现Itanium版模板解释器不方便,他们就想到了把CVM的解释器移植过来,这样可以少写点汇编就能完成移植。结果一直以来HotSpot能运行的平台上只有Itanium版是真的用了这个C++解释器的,而其它平台上默认都在用模板解释器,但还是可以通过编译参数选择使用C++解释器。

?Synchronized底层实现---偏向锁

标签:逻辑   正是   com   编译   hotspot   --   参数   tab   一个   

原文地址:https://www.cnblogs.com/charlottepl/p/13395989.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!