web-dev-qa-db-ja.com

新しいTLABでの割り当てとTLAB外での割り当て

Java Mission Controlツールは、新しいTLABでのオブジェクト割り当てとTLAB外の割り当てに関する統計を提供します(メモリ/割り当ての下にあります)。これらの統計の重要性は何ですかアプリケーションのパフォーマンス?一部のオブジェクトがTLABの外部に割り当てられているかどうか心配する必要があります。割り当てられている場合は、どうすればよいですか?

44
WannaKnow

TLABは、スレッドローカル割り当てバッファーです。 HotSpotでオブジェクトを割り当てる通常の方法は、TLAB内です。 TLAB割り当ては、他のスレッドと同期せずに実行できます。割り当てバッファーはスレッドローカルであるため、新しいTLABがフェッチされた場合にのみ同期が必要です。

したがって、理想的なシナリオは、可能な限り多くの割り当てがTLABで行われることです。

ラージオブジェクトなど、一部のオブジェクトはTLABの外部に割り当てられます。 TLABの外の割り当てと新しいTLABの割り当ての割合が低い限り、これは心配する必要はありません。

TLABは、各スレッドの実行中に個別に動的にサイズ変更されます。したがって、スレッドが非常に多く割り当てる場合、スレッドがヒープから取得する新しいTLABのサイズが増加します。必要に応じて、フラグ-XX:MinTLABSizeを設定して、TLABの最小サイズを設定することができます。例:-XX:MinTLABSize=4k

同僚のDavid Lindholmからの回答:)

77
Klara