标签:逻辑 正是 com 编译 hotspot -- 参数 tab 一个
synchronized分为synchronized代码块和synchronized方法,其底层获取锁的逻辑都是一样的。
要找到锁的入口,就要找到代码中对monitorenter指令解析的地方。在HotSpot中有两处对monitorenter进行了解析:一个是在bytecodeInterpreter.cpp#1816 ,另一个是在templateTable_x86_64.cpp#3667。
在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++解释器。
标签:逻辑 正是 com 编译 hotspot -- 参数 tab 一个
原文地址:https://www.cnblogs.com/charlottepl/p/13395989.html