私は、このクラスのプロセス.IN 6000 recrodsをCalcのランナーのJavaクラスを持って、いくつかの計算は5-6日かかります持っている各レコードがありますJavaプログラムの性能を改善するにはどうすればいいですか?
-6
A
答えて
2
事前にマルチスレッドのおかげでコードを改善するために、すべてのrecords.Howを処理しますあなたの問題に対するいくつかの解決策。 その1つは、Fork/Joinフレームワークを使用することです。 ここでは例を挙げて、どのように動作するかを示します。
もちろん、これは単なる例であり、ニーズに合わせてカスタマイズできます。現実には、配列内の値を二重にするためにFork/Joinフレームワークを使用する人はいません。
ints(sourceArray)の配列があり、sourceArrayのすべての値を2倍にして別の配列(targetArray)を埋めたいとします。 compute()メソッドでロジックを含むRecursiveActionを作成できます。 computeメソッドは、バッチサイズが十分に小さい場合は値自体を計算するか、計算を委譲する2つの小さなタスクを作成するかを決めることができます。
import java.util.concurrent.ForkJoinPool;
import java.util.concurrent.ForkJoinTask;
import java.util.concurrent.RecursiveAction;
public class ForkJoinPoolExample {
public static final int ARRAY_SIZE = 6000;
public static int[] sourceArray = new int[ARRAY_SIZE];
public static int[] targetArray = new int[ARRAY_SIZE];
public void initArray() {
for (int i=0; i<ARRAY_SIZE; i++) {
sourceArray[i] = i;
}
}
public static class Calc extends RecursiveAction {
private int from;
private int to;
public static final int BATCH_SIZE=5;
public Calc(int from, int to) {
this.from = from;
this.to = to;
}
@Override
protected void compute() {
if (to-from <= BATCH_SIZE) {
for (int i = from; i<to; i++) {
targetArray[i] = sourceArray[i] * 2;
}
} else {
int middle = from +((to - from)/2);
invokeAll(new Calc(from, middle), new Calc(middle, to));
}
}
}
public static void main(String[] args) {
ForkJoinPoolExample fjpe = new ForkJoinPoolExample();
fjpe.initArray();
ForkJoinPool pool = new ForkJoinPool();
ForkJoinTask task = new Calc(0, ARRAY_SIZE);
pool.invoke(task);
for (int i=0; i<ARRAY_SIZE; i++) {
System.out.println(sourceArray[i] + " -> " + targetArray[i]);
}
}
}
関連する問題
- 1. USBデバイスドライバのTx性能を改善するにはどうすればよいですか?
- 2. このPythonコードを改善してネガティブテストを改善するにはどうすればよいですか?
- 3. このprocを改善するにはどうすればよいですか?
- 4. このデータベースモデルを改善するにはどうすればよいですか?
- 5. 次のコードを改善するにはどうすればよいですか?
- 6. AppHarborのアプリケーションパフォーマンスを改善するにはどうすればよいですか?
- 7. このソートコードを改善するにはどうすればよいですか?
- 8. チームシティビルドのパフォーマンスを改善するにはどうすればよいですか?
- 9. JLabelのレンダリングを改善するにはどうすればよいですか?
- 10. Djangoでビューを改善するにはどうすればよいですか?
- 11. VNDetectRectanglesRequestをVNDetectCarRequestに改善するにはどうすればよいですか?
- 12. clispエラーメッセージを改善するにはどうすればよいですか?
- 13. 検索スクリプトを改善するにはどうすればよいですか?
- 14. この階乗プログラムの出力を改善するにはどうすればよいですか?
- 15. この単純なgridview表示プログラムのパフォーマンスを改善するにはどうすればよいですか?
- 16. このJavascriptライブラリの互換性を改善するにはどうすればよいですか?
- 17. ブートストラップナビの応答性を改善するにはどうすればよいですか?
- 18. この機能マップのタイプスクリプトを改善するにはどうすればよいですか?
- 19. 短いVBAコードを以下のように改善するにはどうすればよいですか?
- 20. 検索機能を改善するにはどうすればよいですか? PHP + MySQL
- 21. Pythonコードをどのように改善すればよいですか?
- 22. 括弧がバランスしているかどうかを確認するプログラムを改善するにはどうすればよいですか?
- 23. ログインを必要としないオンラインフォームのセキュリティを改善するにはどうすればよいですか?
- 24. Blackberry jde4.6シミュレータのデバッガの接続速度を改善するにはどうすればいいですか?
- 25. この関数の単体テストを改善するにはどうすればいいですか?
- 26. ソーシャルネットワークのERダイアグラム、どうすれば改善できますか?
- 27. SQLクエリが非常に遅い - どうすれば改善できますか?
- 28. スマートフォンでJavaScriptをフィルタリングするテーブルの速度を改善するにはどうすればよいですか?
- 29. 最初のOSSプロジェクトを改善するにはどうすればいいですか
- 30. フィルタリングされたオブジェクトのループをlodashで改善するにはどうすればよいですか?
コードなしではお手伝いできません。 –
私のアプローチ方法それを行う方法 –
jvisualvmのようないくつかのプロファイラを使用し、ほとんどの時間を取る方法を見つける。次に、関連コードを含む質問をしてみてください。 –