2013-04-10 20 views

答えて

0

通常、gcは別のスレッドで実行されています。しかし、通常は大きな違いはありません。それで全部です。

+0

別のスレッドで実行されているGCは、私の経験ではパフォーマンスが大幅に向上しています。 – Gray

+0

@Grayこれは、プログラムの種類、オブジェクトの作成方法、生き残り回数、そしてどれくらいの期間に依存します。 – kan

+0

確かに。しかし、「大きな違いはありません」と言っているのは、IMHOです。間違っています。 – Gray

13

Javaプログラムの1つのスレッドは、自動的にCPU上に複数のコアを使用できますか?

はい、いいえ。単一スレッドのJavaプログラムは、GC、JMX、ファイナライザ、およびその他のバックグラウンドスレッドが異なるCPU(CPUまたはコア)で実行できるという点で、複数のスレッドを使用します。 GCスレッドは、別のCPUで実行することができれば、パフォーマンスが大幅に向上します。ただし、単一スレッドのアプリケーションでは、がCPU間でに移動することはありますが、同時に2つのCPUで実行されることはありません。

どのようにそれを見つけるには?

これは難しい質問です。これは実行しているアーキテクチャによって異なります。 * nixの下のpsは、実行キューに複数のスレッドがある場合でも表示できますが、それでも複数のCPUで実際に実行されていることを示すことはできません。

+0

私は、複数の物理的なCPUではなく、複数のコアを意味します。 – user697911

+0

同じ回答@ user697911。 JVMでは、コア/ CPUの区別は、OSによって完全には隠されていない場合がほとんどです。 – Gray

+1

OSはコアとCPUの違いを知っているかもしれませんが、JVMは論理CPUだけを見ています –

1

独自のコードは、複数のコアでは定義されていない場合はシングルスレッドで実行されません。マルチスレッドのコール/ライブラリを知らずに使用しない限り、複数のコアで同時に実行することはできません。

+0

私のアプリケーションを高速化するためには、複数のスレッドを作らなければなりませんか?私のマシンは16のコアを持ち、1つのコアは100%を超えるCPUを使用していますが、他のコアはフリーです。アプリケーションが非常に遅いです。 – user697911

+0

はい、スレッド間で作業が分割されるようにアルゴリズムを書く方法を理解する必要があります。たとえば、forループを使用して160要素の配列を作成する場合、それぞれ10要素で動作する16スレッドを生成できます。ただし、前回の計算で将来の計算が不要であることを確認する必要があります。たとえば、160日以上の総利益を計算する場合、毎日前の計算を必要とします。 –

+0

複数のスレッドを使用すると、さらに多くのメモリが使用されますか? – user697911

関連する問題