6

Google によると、V8 は「ストップ・ザ・ワールド、世代別、正確なガベージ コレクタ」を採用することにより、効率的なガベージ コレクションを使用します。主張の一部は、ガベージ コレクション サイクルを実行するときに V8 がプログラムの実行を停止することです。

明らかな疑問は、プログラムの実行を一時停止するときに効率的な GC を実現するにはどうすればよいかということです。

node.jsサーバーを起動する1秒あたり数万のリクエストがある場合に、GCが応答時間にどのように影響するかを知りたいので、このトピックについてもっと見つけようとしていました.

専門家の助け、個人的な経験、またはリンクは大歓迎です

ありがとうございました

4

1 に答える 1

13

「効率的」にはいくつかの意味があります。ここでは、おそらく高スループットを指します。応答時間を見ると、レイテンシーに関心が高まります。これは、代替の GC 戦略よりも実際に悪い可能性があります。

stop-the-world GC の主な代替手段は次のとおりです。

  • 制御をミューテーター1に一時的に戻す前に収集サイクルを終了する必要がないインクリメンタル GC、および
  • (仮想的に)ミューテーターと同時に動作し、非常に短時間だけ中断する(スタックをスキャンするなど)並行GC。

両方とも、ヒープの同時変更に直面して正しくなるために余分な作業を実行する必要があります (たとえば、新しいオブジェクトが作成され、既にスキャンされたオブジェクトにアタッチされている場合、この新しい参照に注意する必要があります)。これは総スループットに影響を与えます。つまり、実際にヒープ全体をクリーンアップするには時間がかかります。利点は、(通常) 非常に長い間プログラムを中断しないことです。

V8 のドキュメントにはまだstop-the-world コレクターが記載されていますが、V8 GC2011年以降インクリメンタルであるようです。ヒープ全体をスキャンします。代わりに、たとえば数ミリ秒スキャンして、プログラムを再開させることができます。

1「Mutator」は、ヒープがガベージ コレクションされるプログラムの GC 用語です。

2少なくとも原則として、これはおそらく設定可能です。

于 2013-03-11T14:22:47.007 に答える