2020-10-03:javaのsatbとtlabの違いは何ですか?

Fu Ge Answer 2020-10-03:#福大建築家デイリーワン質問#

簡単な答え:
satb:最初のスナップショット、スナップショット。
tlab:スレッドローカル割り当てバッファー、スレッドローカル割り当てバッファー。

中間回答:
satb:最初のスナップショット、スナップショット。
マーキングのプロセスは、3色のマーキングアルゴリズムを使用して、ヒープをトラバースしてライブオブジェクトをマーキングすることです。3色は、白(アクセスされていないことを示す)、灰色(アクセスされているが、使用する参照が完全にスキャンされていない)、黒(完全にスキャンされていないことを示します)です。アクセスと使用される参照は完全にスキャンされています)、3色のマーキングアルゴリズム全体は、GCルートからヒープをトラバースし、到達可能なオブジェクトに対して白を灰色としてマークし、次に灰色を黒としてマークします。トラバースが完了した後、すべて到達可能です。オブジェクトはすべて黒で、すべての白はリサイクル可能です。
SATBは、マーキングの開始時の「スナップショット」(マークの開始時にすべて到達可能とマークされます)専用ですが、同時変更を行うと、
などの同時変更時にオブジェクトがマークを見逃す可能性があります。黒への新しい参照は白いオブジェクトであり、次に灰色のオブジェクトからです。白いオブジェクトへの参照を削除します。これにより、白いオブジェクトがマークを見逃します。
②。白のオブジェクトが新たに黒を参照した後、白のオブジェクトを参照している白のオブジェクトが灰色のオブジェクトから削除されるため、白のオブジェクトもマークを外します。
③。新しく新しい白いオブジェクトは黒を参照し、他の灰色のオブジェクトは白いオブジェクトを参照しません。これにより、白いオブジェクトもマークを見逃します。
3色アルゴリズムの同時実行時に発生する可能性のある欠落マークの問題については、SATBのマーキングフェーズで、灰色のオブジェクトから削除されたターゲット参照オブジェクトが灰色としてマークされ、黒で参照される新しく生成されたオブジェクトが黒としてマークされます。スナップショットは最初に取得されるため、フローティングガベージが存在する可能性があります。

tlab:スレッドローカル割り当てバッファー、スレッドローカル割り当てバッファー。
メモリ割り当てアクションは、スレッドに応じて異なるスペースに分割されます。つまり、各スレッドは、Javaヒープ内のプライベートメモリの小さな部分、つまりローカルスレッド割り当てバッファ(スレッドローカル割り当てバッファ、TLAB)を事前に割り当てます。JVMは、スレッドが初期化されるときに初期化されます。同時に、現在のスレッドでのみ使用される指定されたサイズのメモリにも適用されるため、各スレッドには個別のバッファがあります。メモリを割り当てる必要がある場合は、メモリを独自のバッファに割り当てて、競合が発生しないようにします。割り当て効率を向上させます。バッファ容量が足りない場合は、エデンエリアから別のピースを申請して使い続けてください。
TLABの目的は、各Javaアプリケーションスレッドが独自の専用割り当てポインタを使用して、新しいオブジェクトにメモリスペースを割り当てるときにスペースを割り当て、同期のオーバーヘッドを削減できるようにすることです。
TLABは、各スレッドがプライベート割り当てポインターを持つことを許可するだけですが、基になるオブジェクトのメモリスペースはすべてのスレッドからアクセスできますが、他のスレッドはこの領域に割り当てることができません。TLABがいっぱいになると(割り当てポインタの上部が割り当て制限の終わりに達する)、新しいTLABが要求されます。


コメント

おすすめ

転載: blog.csdn.net/weixin_48502062/article/details/108913753