web-dev-qa-db-ja.com

TLAB(Thread Local Allocation Buffer)とは何ですか?

概念を明確に説明する包括的な情報源を見つけることができませんでした。私の理解では、スレッドには新しいオブジェクトを割り当てるエデンのメモリのチャンクが与えられます。競合するスレッドは、やや連続したエデンのチャンクを持つことになります。最初のスレッドがTLABの空き領域を使い果たすとどうなりますか?エデンの新しいチャンクを要求しますか?

27
user1745356

TLABのアイデアは、スレッド間の同期の必要性を減らすことです。 TLABを使用すると、どのスレッドにも使用可能な領域があり、この領域を使用するのはそれだけであると予想されるため、この必要性は軽減されます。 TLABが100個のオブジェクトを保持できると仮定すると、スレッドは101個のオブジェクトを割り当てるときに、より多くのメモリを要求するためにロックを取得するだけで済みます。 TLABがなければ、これはすべてのオブジェクトに必要です。マイナス面はもちろん、潜在的にスペースを無駄にすることです。

ラージオブジェクトは通常、同期メモリ割り当ての頻度を減らす利点を無効にするため、TLABの外部に割り当てられます。一部のオブジェクトはTLAB内に収まらない場合があります。

-XX:TLABSizeフラグを使用してTLABのサイズを設定できますが、一般的に、それによって解決できる問題を実際に発見した場合を除き、これらの設定を台無しにすることはお勧めしません。

34