`
李静波
  • 浏览: 53800 次
  • 性别: Icon_minigender_1
  • 来自: 大连
社区版块
存档分类
最新评论

vmSymbols与vmSymbolHandles

阅读更多
vmSymbols和vmSymbolHandles这两个都是只拥有静态成员和方法的class。
其定义在:\hotspot\src\share\vm\memory\vmSymbols.hpp
用来缓存JVM内部常用的symboleOop和symboleHandle。
例如:
   symbolOop obj       = vmSymbols::java_lang_Object(); // java.lang.Object的oop
   SymbolHandle handle = vmSymbolHandles::java_lang_Object(); // oop对应的Handle
 
vmSymboleHandles是vmSymboles的一个Helper。
Handle和Oop的关系参见这里

看个例子
vmSymbolHandles::java_lang_Object()的实现代码是
static symbolHandle java_lang_Object() {
    return symbol_handle_at(vmSymbols::java_lang_Object_enum);
}

而  static symbolHandle symbol_handle_at(int n) {
       return symbolHandle(&vmSymbols::_symbols[n], false);
    }
所以
vmSymbolHandles::java_lang_Object()
<==> symbolHandle(&vmSymbols::_symbols[vmSymbols::java_lang_Object_enum], false)
     (这是调用symboleHandle的构造函数)
 
注意到:vmSymbols::_symbols[vmSymbols::java_lang_Object_enum] <==> vmSymbols::java_lang_Object()
所以 vmSymbolHandles::java_lang_Object() <==> symbolHandle(&vmSymbols::java_lang_Object())
 
这些oop和handle的定义使用了宏:VM_SYMBOLS_DO、VM_SYMBOL_DECLARE、VM_SYMBOL_HANDLE_DECLARE。

oop的初始化在vmSymbols::initialize中实现,其实现使用了宏:VM_SYMBOL_INITIALIZE,
真正创建oop使用的是oopFactory::new_symbol。
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics