web-dev-qa-db-ja.com

Javaで複数のスレッドと単一のオブジェクトを共有するパフォーマンス

Javaでは、何かを行うメソッドを持つオブジェクトを作成し、そのオブジェクトをメソッドを呼び出す複数のスレッドに渡すと、各スレッドでそのクラスの個別のインスタンスを作成する場合とパフォーマンスに違いがありますか?

つまり、何千ものスレッドが同じオブジェクトのメソッドに同時にアクセスしようとするとボトルネックが発生しますか?

メモリやプロセッサの動作についてはわかりませんが、単一オブジェクトオプションではメモリ内に単一のインスタンスがあり、何千ものスレッドがそのコードを一度に利用しようとしているように思えます。シングルコアプロセッサの場合、プロセッサは1つの処理しか実行できないため、これは無関係である可能性があります。しかし、マルチコアセットアップでは、複数のスレッドすべてが同時にメモリ内の単一オブジェクトのコードを利用できますか?

4
Joe

状況によります

同期がなく、揮発性またはアトミック変数がない場合、違いはありません。

ただし、ifこれらのメソッドはオブジェクトの状態を変更しますneed何らかの形式の同期、そうでない場合、複数のスレッドが変更を上書きします他のスレッドまたは変更が表示されません。同期は自由ではなく、揮発性変数とアトミックは自由ではないので、それらの1つを使用すると、違いが生じます。

2
tkausl