随笔 - 79  文章 - 58  trackbacks - 0
<2015年12月>
293012345
6789101112
13141516171819
20212223242526
272829303112
3456789

常用链接

留言簿(9)

随笔分类

随笔档案

文章档案

相册

搜索

  •  

积分与排名

  • 积分 - 294258
  • 排名 - 87

最新评论

阅读排行榜

评论排行榜

V8将指针抽象为Handle模板类对象,Handle模板类对指针进行了简单的封装,

Handle分为两类:local和persistent ,Local handles 通常是本地的,短暂的,由HandleScopes类进行管理,不需要显示的释放。

persistent用于跨多个独立的存储对象操作,需要显示的释放。

 

HandleScopes类管理local handle。声明一个HandleScopes,则后续所有新建的local handle都由此HandleScopes管理,当HandleScopes生命消亡

的时候,由HandleScopes管理得local handle也就消亡了。

可以看到Local的new的实现,就是通过HandleScope::CreateHandle创建的

template <class T>
Local<T> Local<T>::New(Handle<T> that) {
  if (that.IsEmpty()) return Local<T>();
  internal::Object** p = reinterpret_cast<internal::Object**>(*that);
  return Local<T>(reinterpret_cast<T*>(HandleScope::CreateHandle(*p)));
}

在已有一个HandleScopes1的时候再创建一个HandleScopes2,则新建的HandleScopes2管理后续新建的local handle,当HandleScopes2

生命周期结束时,HandleScopes1则管理

HandleScope::HandleScope() : is_closed_(false) {
  API_ENTRY_CHECK("HandleScope::HandleScope");
  i::HandleScope::Enter(&previous_);   //保存前一个HandleScope
}


HandleScope::~HandleScope() {
  if (!is_closed_) {
    i::HandleScope::Leave(&previous_); //恢复前一个HandleScope为当前HandleScope
  }
}

 

posted on 2015-12-13 23:24 merlinfang 阅读(587) 评论(0)  编辑 收藏 引用 所属分类: v8

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   博问   Chat2DB   管理