使用node.js进行垃圾回收

使用node.js进行垃圾回收,第1张

使用node.js进行垃圾回收

简单的答案:如果

str
没有从其他任何地方引用的值(并且
str
本身也没有从引用
restofprogram
),则
function (str) {... }
返回时将无法访问它的值。

详细说明:V8编译器区分真正的 地方 ,从所谓的变量 背景 变量被关闭,由阴影捕获 语句来或

eval
调用。

局部变量存在于堆栈中,并在函数执行完成后立即消失。

上下文变量位于分配给堆的上下文结构中。当上下文结构消失时,它们消失。这里要注意的重要一点是,来自同一作用域的上下文变量位于 同一
结构中。让我用示例代码进行说明:

function outer () {  var x; // real local variable  var y; // context variable, referenced by inner1  var z; // context variable, referenced by inner2  function inner1 () {    // references context     use(y);  }  function inner2 () {    // references context     use(z);  }  function inner3 () {  }  return [inner1, inner2, inner3];}

在这个例子中变量

x
将尽快消失
outer
的回报,但变量
y
,并
z
只有当将消失 两个
inner1
inner2

inner3
死。发生这种情况是因为
y
z
分配在相同的上下文结构中,并且所有三个闭包都隐式引用此上下文结构(即使
inner3
没有显式使用它)。

当你开始使用情况变得更加复杂 语句来, try / catch语句 ,其在V8中包含一个隐含的语句来
语句来里面的catch子句或全局

eval

function complication () {  var x; // context variable  function inner () {  }  try { } catch (e) {  }  return inner;}

在此示例中,

x
仅在
inner
死亡时才会消失。因为:

  • try / catch-在catch子句中 包含 -statement 隐式
  • V8假定任何 带有 -statement的语句都会遮盖 所有 本地人

这迫使

x
成为上下文变量并
inner
捕获上下文,
x
直到上下文
inner
消失为止。

通常,如果您要确保给定的变量保留某个对象的时间不超过实际需要的时间,则可以通过分配给该变量轻松地 破坏 此链接

null



欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5111331.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-11-17
下一篇 2022-11-17

发表评论

登录后才能评论

评论列表(0条)

保存