我在V8中清理垃圾时遇到了困难。首先,我的Javascript代码如下:
var bigstring = "ASD";
for (var b = 0; b < 20; b++) {
bigstring = bigstring + bigstring;
}
trace("bigstring " + bigstring.length);
function frame() {
// generate some garbage
var junkArray = [];
for (var i = 0; i < 1000; i++) {
junkArray.push(i + bigstring);
}
}
使用 C++,我正在运行一个循环:
- 调用
frame
。 - 收集垃圾:
while(!V8::IdleNotification()) {};
预期结果是每次迭代都会收集 junkArray
垃圾。毕竟,只有当“V8 已经完成了尽可能多的清理工作”(doc) 时,IdleNotification
才会返回 true。
事实上,垃圾只有在大约每 100 次迭代后才被清理*。我是否漏掉了什么步骤?为什么 junkArray
在 frame
后不立即成为垃圾?
*通过比较使用前后的堆使用量来确定