我在 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
都会收集垃圾。毕竟,IdleNotification
只有在“V8 已完成尽可能多的清理工作” (文档)时才返回 true 。
事实上,垃圾只被清理*大约。每 100 次迭代。我错过了一步吗?junkArray
出于某种原因不是垃圾立即吗frame
?
*通过比较前后堆使用情况确定