Chrome開発ツールを使用してJavaScriptアプリケーションをプロファイリングしています。
大きくなるメモリ領域は、システムオブジェクトの合計だけであることがわかります。
どのシステムオブジェクトがリークされたかを示す詳細がツールにないため、このような動作の原因をどのように理解できるのでしょうか。
アプリの割り当てを確認しましたが、時間の経過とともにあまり変化しません...タイムライン機能を使用している場合、ヒープは500MBを超えます
Chromiumでの JSHeapSnapshot.js 実装によると、wOxxOmによるコメントで言及されているように、100000000までの特定のノード距離の比較が実行されます(distances[ordinal] >= WebInspector.HeapSnapshotCommon.baseSystemDistance
、 どこ WebInspector.HeapSnapshotCommon.baseSystemDistance = 100000000
)合格すると、サイズは円グラフのシステムセグメントに累積されます。
この値を最後に変更する commit は、
現在、ユーザーオブジェクトがシステムスペースオブジェクト(デバッガーなど)と別のユーザーオブジェクトの両方によって保持されている場合、システムオブジェクトは保持ツリーの前半に表示される可能性があります。これは、その距離が他の保持ユーザーオブジェクトの距離よりも小さい場合に発生します。
このパッチは、システムスペースオブジェクトからユーザーオブジェクトへのリンクを優先度の低いものとして処理するため、これらのリンクはリテーナツリーの下部に表示されます。
これは、javascriptヒープ上のシステム空間オブジェクトがデバッガーやブラウザーのその他の内部(V8、WebKitなど)によって利用されていることを示しています。これらは、スクリプトによって割り当てられたヒープオブジェクトの直接制御の範囲外です。
wOxxOmは、名前が以前はV8ヒープであったことにも言及しました。つまり、実行中のスクリプトの範囲外にある、V8が割り当てるオブジェクトです。
プロファイリングを実行してスナップショットを取得すると、そのカテゴリのヒープオブジェクトでも割り当てが実行される可能性が高く、時間の経過とともにシステム割り当てを構築するパターンが発生します。