Rob*_*ann 12 javascript garbage-collection v8 node.js
考虑一下这块蛋糕......呃,代码:
'use strict'
function doWork () {
return new Promise(function (resolve, reject) {
// work work work...
// Done! But... where's the resolve() ???
})
}
doWork().then(function doMoreWork () {
// Some more work to do...
})
Run Code Online (Sandbox Code Playgroud)
一旦Promise的构造函数中的函数完成......
Promise
对象垃圾收藏?doMoreWork()
垃圾收藏?我的猜测是doMoreWork()
不能直接进行GC编辑,因为Promise保留了对它的引用,但是一旦promise的主体完成并将执行上下文返回到上部(?)范围,堆栈就会展开(因为这里没有更多的语句)被执行)并且Promise变得无法访问,因此是垃圾收集的.
你能否证实我对这个主题的理解是正确的?
我怎么能凭经验观察这种行为?换句话说,我如何监控哪些对象正在进行GC编辑?何时?我纯粹在Node.js中开发,如果这有任何区别.
没有任何东西保留对承诺的引用,因此它将被垃圾收集。Promise 是唯一保留对该函数的引用的东西doMoreWork
,因此它也会被垃圾收集。
我如何凭经验观察这种行为?换句话说,我如何监控哪些对象正在被 GC 回收以及何时回收?我纯粹使用 Node.js 进行开发,如果这有什么区别的话。
V8 中的 GC 不一定会收集对象。例如,如果这是您的整个程序,那么首先运行任何 GC 都是浪费时间。