最初の質問:Java:ExecutorサービスはWindowsではなくLinux上で動作が遅くなります
私はExecutorServiceを使用して4つのfixedThreadPoolを実行するアプリケーションを持っています。このアーキテクチャを使用すると、アプリケーションはWindows上でシングルスレッドアーキテクチャでより速く実行されます。しかし、私がLinuxでExecutorServiceアーキテクチャを実行したとき、私のアプリのパフォーマンスはシングルスレッドのアプリよりも悪かったです。
両方のマシンのCPUと他のハードウェアは同じです。私は別のマシンで試してみても同じ結果を得ました。私はさらにfixedThreadPoolを3または2に制限しようとしましたが、それでもパフォーマンスは低下しました。私はLinuxマシンの遅さを引き起こしていない変数は何ですか?
ExecutorService execSvc =
Executors.newFixedThreadPool(NUMBER_OF_PROCESSORS);
Perform perform[] = new Perform[n];
Future<?>[] future = new Future<?>[n];
for(int i=0;i<n;i++)
future = execSvc.submit(perform[i]);
for(int i=0;i<n;i++)
//To wait until all done
future[i].get();
両方のOSが同じマシン上で実行されます。 JAVAのバージョン:Windows 1.6.0_22、LinuxのオープンJDK1.6.0_20
EDIT:
私はLinux上で-Xincgcを追加しようと、予想通り、最初の数分間のコードが高速で実行され、その後、それが起動するように思えます急速に減速する。私が作成したコードチャンクが私のアプリケーションで膨大な時間稼働していることを確認してください。これは、JVM GCが異なるOSで異なる動作をしていることを示していますか?
AFTER試験:
OpenJDKのが問題を引き起こしているように見える4台の異なるLinuxマシンにしようとした後。最初はopenJDKをインストールしてはいけませんでしたが、@Alfabravoに感謝してくれてありがとうございます。
コードを表示してください。 –
WindowsシステムとLinuxシステムについて詳しく教えてください:両方が同じPCハードウェアにありますか?テスト結果でテストされたハードウェア仕様の一部はうまくいくでしょう... – ecle
@eeeはい、両方とも同じハードウェアで動作します。私はすぐにいくつかのテスト結果を生成します。 – Vig