- V8里面的变量是有GC进行控制的与C++不同,所以通过Handle类型来托管JS对象,以使GC来管理它们的生命周期。
- V8里面变量的生命周期也和C++中的不一样,C++中是根据作用域比如{}来进行决定是否销毁变量,而在V8里面是通过HandleScope来声明一个(非全局)作用域,在一个HandleScope对象后的所有Handle都是由它来管理生命周期,当HandleScope被析构的时候,其管理的Handle将被GC判断是否需要回收。
- 但是如果在局部创建的一些HandleScope会受C++作用域的影响在作用域结束的时候被析构,会导致里面被托管的对象被GC回收,所以解决方法是HandleScope的Close()方法可以将当前的HandleScope关闭并且把方法参数传递给上一个HandleScope,也就是进入这个局部作用域之前的scope
V8的基本概念
最新推荐文章于 2024-01-18 09:28:28 发布