ThreadLocal は、スレッドセーフな方法で操作するオブジェクトの別のコピーを持つために作成されます。
これは、処理中のオブジェクトの数がスレッドの数として増加することを意味します。これは、各スレッドが独自の ThreadLocals のコピーを作成するためです。
- プロセスのメモリ要件が増加しませんか?
ThreadLocal は、スレッドセーフな方法で操作するオブジェクトの別のコピーを持つために作成されます。
これは、処理中のオブジェクトの数がスレッドの数として増加することを意味します。これは、各スレッドが独自の ThreadLocals のコピーを作成するためです。
メモリ使用量を増加させる特定の原因は s であることを暗示しているようですThreadLocal
が、実際には、あなたの質問はThreadLocal
s自体とは特に関係ありません。あなたが説明した状況では、それらはある時点で割り当てられた単なるオブジェクトであり、遅くともスレッドが終了すると到達できなくなります。
Java でプロセスが使用するメモリの量は、次の要素によって異なります。
各項目に関連するメモリ消費量は、アプリケーション、ランタイム環境、およびプラットフォームによって異なります。では、総メモリ量はどのように計算するのでしょうか? ネイティブ部分をほとんど制御できないため、正確な数値を取得するのはそれほど簡単ではありません。実際に制御できる部分は、ヒープの量 -Xmx、クラスによって消費されるメモリ -XX:MaxPermSize、および各スレッドが使用するメモリの量を制御するスレッド スタック -Xss だけです。サイズが小さすぎると StackOverflow 例外が発生し、アプリケーションが正しく動作しなくなるため、スタック サイズを調整するときは注意してください。したがって、式は次のとおりです。
(-Xmx) + (-XX:MaxPermSize) + numberofthreads * (-Xss) + Other mem
したがって、明らかに、プロセスが必要とするメモリの量は、スレッドの数が増えるにつれて増加します。あなたの質問は ThreadLocals に関するものではなく、むしろ一般的なスレッドに関するものです。