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。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值