1

プログラムからデーモンスレッドを作成する場合(デーモン以外のプロセス)、ヒープとパーマ生成のメモリスペースは新しいスレッドと共有されますか、それとも新しく割り当てられますか?

デーモンスレッドが独自のスペースを取得する場合、新しいスレッドの作成では、最大ヒープサイズなどのJVMメモリ調整引数が尊重されますか?

4

2 に答える 2

8

ヒープとpermgenのメモリスペースは新しいスレッドと共有されていますか、それとも新しく割り当てられていますか?

すべてのスレッド(デーモンのステータスは関係ありません)は、ヒープとパーマのメモリスペースを共有します。各スレッドには、メソッドフィールドと呼び出しスタックを格納するために使用する独自のスタックスペースがあります。JVM引数を変更することにより、割り当てられたスレッドごとのスタックスペースのサイズを調整できます。ただし、これらのスタック領域でさえ、一般的なJVMヒープスペースの一部です。

スレッドは、別のCPUで実行されている場合、メモリキャッシュもあります。CPUごとのメモリキャッシュはパフォーマンス上の理由で使用されるため、アクセスのたびに情報を中央ストレージに同期しなくても、速度上の理由でローカルCPUメモリを更新できます。ただし、これらのキャッシュは、一般的なJVMメモリスペースからの読み取りと書き込みを行います。

デーモンスレッドの実際の意味の詳細については、@Peterの回答を参照してください。

于 2012-09-12T13:47:04.123 に答える
3

デーモンスレッドと通常のスレッドの唯一の重要な違いは、プロセスの停止を防ぐかどうかです。通常のスレッドはJVMを実行し続けますが、デーモンは実行しません。

デーモンスレッドには

  • 最大サイズが1つある同じヒープ。
  • 同じpermgenで、最大サイズも1つあります。
  • 同じスレッドの優先順位。
  • 同じ量のメモリを使用します。
  • スタックの最大サイズは同じです。

ところで:他の違いは衒学的であり、

  • isDaemon()は戻りますtrue
  • デーモンはデフォルトでデーモンスレッドを作成します。
  • スレッドダンプにデーモンとして表示されます。
于 2012-09-12T14:04:58.137 に答える