web-dev-qa-db-ja.com

chrome javascriptメモリプロファイラーのシステムオブジェクトは何ですか

Chrome開発ツールを使用してJavaScriptアプリケーションをプロファイリングしています。

大きくなるメモリ領域は、システムオブジェクトの合計だけであることがわかります。

どのシステムオブジェクトがリークされたかを示す詳細がツールにないため、このような動作の原因をどのように理解できるのでしょうか。

アプリの割り当てを確認しましたが、時間の経過とともにあまり変化しません...タイムライン機能を使用している場合、ヒープは500MBを超えます

initial snapshot"

snapshot after multi-hour usage

snapshot after usage of timeline tool

29

Chromiumでの JSHeapSnapshot.js 実装によると、wOxxOmによるコメントで言及されているように、100000000までの特定のノード距離の比較が実行されます(distances[ordinal] >= WebInspector.HeapSnapshotCommon.baseSystemDistance、 どこ WebInspector.HeapSnapshotCommon.baseSystemDistance = 100000000)合格すると、サイズは円グラフのシステムセグメントに累積されます。

この値を最後に変更する commit は、

現在、ユーザーオブジェクトがシステムスペースオブジェクト(デバッガーなど)と別のユーザーオブジェクトの両方によって保持されている場合、システムオブジェクトは保持ツリーの前半に表示される可能性があります。これは、その距離が他の保持ユーザーオブジェクトの距離よりも小さい場合に発生します。

このパッチは、システムスペースオブジェクトからユーザーオブジェクトへのリンクを優先度の低いものとして処理するため、これらのリンクはリテーナツリーの下部に表示されます。

これは、javascriptヒープ上のシステム空間オブジェクトがデバッガーやブラウザーのその他の内部(V8、WebKitなど)によって利用されていることを示しています。これらは、スクリプトによって割り当てられたヒープオブジェクトの直接制御の範囲外です。

wOxxOmは、名前が以前はV8ヒープであったことにも言及しました。つまり、実行中のスクリプトの範囲外にある、V8が割り当てるオブジェクトです。

プロファイリングを実行してスナップショットを取得すると、そのカテゴリのヒープオブジェクトでも割り当てが実行される可能性が高く、時間の経過とともにシステム割り当てを構築するパターンが発生します。

7
TylerY86