若是你已经读过 Getting Started, 那么如今,你已经对V8的一些关键概念比较熟悉了。好比,V8是一个独立的虚拟机,V8的handle,scope和context的概念。安全
这篇文章更进一步讨论了这些概念,而且介绍了另外的一些将V8嵌入到C++中相当重要的概念。数据结构
V8的API提供了这样一些功能,包括编译和执行脚本,访问C++中的方法和数据结构,处理错误以及开启安全检查。你的应用程序能够像使用其余一些C++库同样来使用V8,而只须要包含它的头文件 v8.h。ide
V8 Design Elements 提供了一些关于V8的背景知识,若是你想优化你的V8应用程序,你应该会感兴趣的。函数
适合本文的读者优化
这篇文章适用于那些想把V8 JavaScript引擎嵌入到C++程序中,同时让JavaScript和C++中的对象和方法互相可见的C++程序猿。ui
Handles(句柄)和垃圾回收google
一个Handle指向一个在堆中的JavaScript对象。 V8垃圾搜集器回收那些没法被再次访问的对象所占用的内存。在垃圾搜集过程当中,搜集器时常将对象移动到一个不一样的位置(固然,对象至始至终都在堆中)。不过不用担忧,当垃圾搜集器移动对象时,它会自动更新每一个Handle,以确保它们指向原来的对象。spa
如何断定一个对象变成垃圾了呢?对象
若是一个对象已经没法在JavaScript中被访问,而且也没有Handle指向它,这个时候,它就被认定成垃圾了。生命周期
垃圾搜集器会时不时的处理掉这些垃圾来回收内存。
V8的垃圾搜集机制是V8良好表现的重要缘由,若是你想深刻了解,V8 Design Elements 也包含了相关内容。
Handle的各类类型:
a. Local handle(局部句柄?)存在于栈中,当相关的析构函数被调用时,会被自动清理掉。这些Local handles的生命周期由容纳它们的handle scope决定。Handle scope一般在函数调用之初被建立。当Handle scope被删除时,垃圾搜集器将大开杀戒,清除掉全部Handle scope中的handle所指向的对象。固然,这些对象就不可能再在JavaScript中被访问,也不会被其它的handle来指向了。这种类型的handle在Getting Started(见“之一”)能够找到。
Local handle的形式为:Local<SomeType>
注意:Handle的栈并非C++栈的一部分,但handle scope的栈倒是嵌入在C++的栈中的。并且Handle scope只能在栈中被建立,也就是说不能new出来(为何?由于new出来的东东存在于堆中)。
b.