我在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
仅在&#34; V8完成尽可能多的清理工作时才返回true&#34; (doc)
事实上,垃圾只清理了*大约。每100次迭代。我错过了一步吗? junkArray
之后是frame
因某种原因而不是垃圾吗?
*通过比较堆使用前后来确定
答案 0 :(得分:5)
而不是v8::V8::IdleNotification
,请尝试使用v8::Isolate::LowMemoryNotification
。据我所知,这是让最近的V8版本通过公共API完成GC的唯一方法。