日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

v8学习笔记(二) Handle和HandleScope机制

發布時間:2024/4/15 编程问答 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 v8学习笔记(二) Handle和HandleScope机制 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1.Handle結構

? (1)API Handle(v8::handle):含有一個T*對象指針,(實際上是相應內部對象指針的指針)

? (2)內部Handle(v8::internal::handle):T**內部對象指針的指針

2.相互轉換:

? (1)API Handle->內部Handle

???????? v8::internal::Handle<v8::internal::To> Utils::OpenHandle(const v8::From* that)

???????? {

??? ?????????? Return v8::internal::Handle<v8::internal::To>(

?????????????????????????????????????????????? ?? reinterpret_cast<v8::internal::To**>(const_cast<v8::From*>(that))

??????????????????????????????????????????????????????????????????????????????????????????????????????????????? );

??????? }

???????? API Handle中的API對象指針強制轉化為內部對象指針的指針,創建內部Handle并返回

?

v8::internal::Handle<v8::internal::Object2> Utils::OpenHandle(* v8::Handle<v8::Object1>);??

??

? (2)內部Handle->API Handle

???????? Local<v8::To> Utils::ToLocal(v8::internal::Handle<v8::internal::From> obj)

???????? {

??? ?????????? ASSERT(obj.is_null() || !obj->IsTheHole());????????????????????????????

??? ?????????? return Local<To>(reinterpret_cast<To*>(obj.location()));???????????????

? ???? }???????

???????? 將內部Handle中的內部對象指針的指針強制轉化為API HandleAPI對象指針,創建API Handle并返回

?

Local<v8::Object1> Utils::ToLocal(v8::internal::Handle<v8::internal::Object2>);?

?

3.API Handle

???????? (1)Local Handle(局部句柄)

???????? (2)Persistent Handle(持久句柄)

???????? Local Handle對應的內部對象指針會被放入HandleScope類中的Static HandleScopeData,HandleScope銷毀的時候會恢復覆蓋(清空)HandleScopeData,使得內部對象成為垃圾,被回收。而Persistent Handle對應的內部對象指針不放入Static HandleScopeData,內部對象指針的指針直接保存在Persistent Handle,由用戶自己銷毀內部對象、釋放內存。

4.API Handle的使用

??函數調用:

???????? (1)重載API Handle->操作符,返回 API對象指針(內部對象指針的指針)

?????????????????? inline T* operator->() const { return val_; }

???????? (2)OpenHandle轉換為內部句柄

???????? (3)重載內部Handle->或者*操作符,返回內部對象指針

???????? (4)開始調用

?

?

()v8 HandleScope機制

1.概述

???????? HandleScope其實就是一個HandleScopeData的備份。

???????? HandleScopeData:內部對象指針的數組

2.HandleScope結構

???????? (1)內部HandleScope

???????? static v8::ImplementationUtilities::HandleScopeData current_;當前HandleScopeData

? ?????? const v8::ImplementationUtilities::HandleScopeData previous_;備份

???????? (2)API HandleScope

?????????????????? HandleScopeData previous_;備份

?

???????? API HandleScope和內部HandleScope共用static HandleScopeData;

3.運行過程

???????? 創建API HandleScope時,備份當前static HandleScopeDataAPI HandleScope中的previous_ 之后創建的對象的指針放入static HandleScopeData,當銷毀(析構)API HandleScope,恢復static HandleScopeData為之前的備份。清空了期間創建的對象的指針,由垃圾回收器回收對象。

???????? 內部HandleScope同理.

與50位技術專家面對面20年技術見證,附贈技術全景圖

總結

以上是生活随笔為你收集整理的v8学习笔记(二) Handle和HandleScope机制的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。