9

Javascript アプリケーションのメモリ リークを探して、Chrome DevTools Profiler を使用しようとしました。そこにある可能性のあるすべてのエントリを説明する詳細な情報はありますか?

たとえば、「ホームページを開き、別のページを開き、ホームページに戻る」という単純な操作を実行して、スナップショットの比較を確認すると、オブジェクト数が多く、関心のある行「(配列)」を見つけることができます。そのノードを開くと、次のような何千もの行が表示されます...

  • (スクリプト行終了)[] @89876
  • (遷移配列)[] @748323
  • (オブジェクトのプロパティ)[] @77529
  • (マップ記述子)[] @13823
  • (コード再配置情報)[] @722653
  • [] @748003
  • (オブジェクト要素)[] @40917

それについてどこで読めますか?

4

1 に答える 1

14

ヒープには、javascript からアクセスできないさまざまな v8 内部のものがあります。

例として (スクリプト行末) は、スクリプトの行末オフセットを持つ配列です。v8 では、ブレークポイントを設定するために必要です。

オブジェクトを作成するたびに、v8 は多くのことを行い、それらにメモリを割り当てます。v8 に関する Lars Bak のビデオをご覧ください。http://www.youtube.com/watch?v=hWhMKalEicY

このトピックに興味がある場合は、v8 の内部に関する多数のスライドとプレゼンテーションがあります。

リークを見つける最も簡単な方法は、「レコード ヒープ割り当て」プロファイルを使用することです。割り当てを含む「リアルタイム」チャートが表示されます。

記録を開始し、シナリオを数回繰り返す必要があります。コードにリークがある場合は、グラフに同じ数の青い縦棒が表示されます。そのため、記録を停止し、中央の青いバーを選択して、そこに含まれるオブジェクトを確認する必要があります。

最初の青いバーは、1 回しか割り当てられていない可能性があるため、興味深いものではありません。

シナリオの次の繰り返しで解放される割り当てが含まれている可能性があるため、最後のものも興味深いものではありません。

したがって、最良の候補は真ん中のバーです。http://www.youtube.com/watch?v=x9Jlu_h_Lyw

最も興味深い項目は、スクリプトによって作成されたオブジェクトです。

于 2013-09-26T06:37:56.220 に答える