10

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 を返します(doc)

実際、ゴミは片付けられるだけです*。100回の反復ごと。手順がありませんか?junkArray直後はなぜかゴミじゃないframe

※前後のヒープ使用量を比較して決定

4

1 に答える 1

6

の代わりにv8::V8::IdleNotification、 を使用してみてくださいv8::Isolate::LowMemoryNotification。私の知る限り、最近の V8 ビルドでパブリック API を介して完全な GC を実行するには、これが唯一の方法です。

于 2015-04-08T13:20:01.440 に答える