スレッドが作成されると、このようになります。
新しいスレッドが作成されると、コード セクション、データ セクション、および開いているファイルなどのオペレーティング システム リソースを他のスレッドと共有します。ただし、独自のスタック、レジスタ セット、およびプログラム カウンタが割り当てられます。
スレッドコスト
スレッド化は、メモリの使用とパフォーマンスの点で、プログラム (およびシステム) に実際のコストをもたらします。各スレッドは、カーネル メモリ空間とプログラムのメモリ空間の両方にメモリを割り当てる必要があります。
スレッドを管理し、そのスケジューリングを調整するために必要なコア構造は、有線メモリを使用してカーネルに保存されます。スレッドのスタック スペースとスレッドごとのデータは、プログラムのメモリ スペースに格納されます。
これらの構造のほとんどは、最初にスレッドを作成するときに作成および初期化されます。このプロセスは、カーネルとの対話が必要なため、比較的コストがかかる可能性があります。
セカンダリ スレッドに割り当てられるスタック領域の量など、これらのコストの一部は構成可能です。スレッドを作成するための時間コストは大まかな概算であり、相互の相対的な比較にのみ使用する必要があります。スレッドの作成時間は、プロセッサの負荷、コンピュータの速度、使用可能なシステムおよびプログラム メモリの量によって大きく異なります。

スレッドはメモリを消費しません (一定サイズのスタックを除いて)。プロセスはメモリを消費します。スレッドの要点は、プロセス状態を共有することです。
共通言語ランタイム(CLR) スレッドのスタック領域は、デフォルトで 1MB (64 ビット コード スレッドの場合は 4MB) に設定されています (CLR によってコミットされます)。
C++ では、スタック用に 1MB を予約します (アドレス空間をマップします) が、必ずしも物理メモリに割り当てられるわけではなく、その一部のみが割り当てられます。スタックがそれ以上に大きくなると、ページ フォールトが生成され、より多くの物理メモリが割り当てられます。
Java スレッドの作成にはかなりの作業が必要なため、コストがかかります。
スレッド スタック用に大きなメモリ ブロックを割り当てて初期化する必要があります。
ホスト OS でネイティブ スレッドを作成/登録するには、システム コールを実行する必要があります。
記述子を作成、初期化し、JVM 内部データ構造に追加する必要があります。
また、スレッドが生きている限りリソースを拘束するという意味でもコストがかかります。たとえば、スレッド スタック、スタックから到達可能なすべてのオブジェクト、JVM スレッド記述子、OS ネイティブ スレッド記述子などです。