V8不会清理所有垃圾

时间:2014-05-30 19:06:23

标签: javascript v8 embedded-v8

我在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因某种原因而不是垃圾吗?

*通过比较堆使用前后来确定

1 个答案:

答案 0 :(得分:5)

而不是v8::V8::IdleNotification,请尝试使用v8::Isolate::LowMemoryNotification。据我所知,这是让最近的V8版本通过公共API完成GC的唯一方法。