0

以下に示すコードの場合、System.currentTimeinMillis() を使用して Java での実行経過時間の測定に関する調査を行っていたので、私のクエリは、時間の測定以外にコーディング中に留意すべき他のパフォーマンス手法です。私のクエリは、パフォーマンスの最適化手法に重点を置いています..

    public class MeasureTimeExampleJava {



    public static void main(String args[]) {

        //measuring elapsed time using System.nanoTime
        long startTime = System.nanoTime();
        for(int i=0; i< 1000000; i++){
            Object obj = new Object();
        }
        long elapsedTime = System.nanoTime() - startTime;

        System.out.println("Total execution time to create 1000K objects in Java in millis: "
                + elapsedTime/1000000);

        //measuring elapsed time using Spring StopWatch
        StopWatch watch = new StopWatch();
        watch.start();
        for(int i=0; i< 1000000; i++){
            Object obj = new Object();
        }
        watch.stop();
        System.out.println("Total execution time to create 1000K objects in Java using StopWatch in millis: "
                + watch.getTotalTimeMillis());
    }   

}

Output:
Total execution time to create 1000K objects in Java in millis: 18
Total execution time to create 1000K objects in Java using StopWatch in millis: 15
4

4 に答える 4

1

コードの最適化を念頭に置いておくときに実行する手順は次のとおりです。

  • アーキテクチャ/設計のベストプラクティスを使用する
  • 保守しやすいコードを書く
  • プロファイラーで結果を測定する
  • プロファイラーが注意が必要だと言っているコードの一部だけを最適化してください
  • プログラムの実際のユーザーに影響を与えるものの最適化にのみ時間を費やしてください

私のプロファイラーは私に興味のある様々な分野を見せてくれます

  • CPUホットスポット
  • 過度のメモリ使用(大量のGCおよび/または大量のスワッピングで発生する可能性があります)
  • 過剰なIO(ディスク、ネットワーク)
于 2012-08-15T16:41:04.650 に答える
0

他にも多くのことに気を配る必要があります。これらはすべて、VisualVMなどのツールを介してアクセスできる必要があります。

  1. CPU
  2. すべての世代のヒープ
  3. 実行中のスレッドとその状態
  4. 作成および廃棄されるオブジェクト
  5. ガベージコレクションサイクル
  6. ネットワークトラフィック
  7. リソースの割り当てとクリーンアップ

このようなマイクロテストが役立つことはめったにありません。JVMは実行時統計を使用してパフォーマンスを最適化するため、「バーンイン」が問題になる可能性があります。

于 2012-08-15T16:40:56.697 に答える
0

経過時間を測定する 2 つの異なる方法をテストしています。同じ JVM 実行で両方のテストを実行しているため、テストに欠陥があります。これにより、最初のテストがキャッシュをウォームアップし、2 番目のテストに影響を与えるリスクが生じます。正しい方法は、各テストを独自の JVM 実行で実行することです。

于 2012-08-15T22:38:03.610 に答える
0

最適化の一番のルールは「しない」です。自分が何をしているのかを非常に正確に把握していない限り、間違ったことを最適化したり、正しいことを見落としたり、パフォーマンスを悪化させたり、信頼性や可読性を損なったりすることになります。

適切に構造化され、十分に文書化されたコンパクトなコードを書くことに集中してください。後で最適化が必要になった場合は、はるかに簡単に実行できます。

(そしてnew Object()、Java で のパフォーマンスを測定するのはばかげた用事であることに注意してください。ガベージ コレクターは部屋にいる 800 ポンドのゴリラなので、すべての測定値は役に立ちません。)

于 2012-08-15T16:49:10.547 に答える