5

コードのどの行が実行のほとんどの時間を使用しているか知りたいのですが。私はプランナーアルゴリズムを実行しています。私が作成した特定の問題を解決するには、コンピューターが解決策を見つけるのに5分かかります。

私は多くの再帰メソッドを使用しています。最も時間が無駄になっている場所を知りたいので、その行を調べて、コードを修正またはリファクタリングして、それが役立つかどうかを確認できます。

循環的複雑度法があることを私は知っています。しかし、Eclipseでそれを使用する方法がわかりません。私はHeliosを使用しています。メトリック2をインストールしようとしましたが、Eclipseでエラーが表示されるだけです。

編集済み:より小さな新しい質問:

http://s7.postimg.org/frd8yjql5/diag.png これはどういう意味ですか?ヒープサイズを見てください..常に上下に..これはCPU速度に影響しますか?ありがとう!

4

3 に答える 3

4

コードのどの行が実行時間のほとんどを使用しているかを知りたいです。

プロファイラーを使用してコードを実行します。Eclipse はプロファイリングをサポートしていますが、JDK の一部として提供されているプロファイラーである VisualVM を使用することをお勧めします。

(「ビッグ オー」の複雑さを分析することから始めるつもりはありません。最初にプロファイルを作成します。そうすれば、どこから調査を開始すればよいかがわかります。次に、ホットスポットのアルゴリズムの複雑さを公式または非公式に調べたいと思うかもしれません。)

Cyclomatic Complexity Methods があることは知っています。

循環的複雑度はパフォーマンスの予測因子ではありません。これは (おそらく) コードの保守性の尺度であり、計算の複雑さの尺度ではありません。私はそれに慣れていませんが、同じことがおそらく「metrics2」にも当てはまります。

于 2013-03-23T12:00:09.403 に答える
2

最初に抽象的な分析から始め、次に詳細に進んで測定します。

抽象分析

分析のために、大きなO表記でアルゴリズムの複雑さを調べます。これはランタイムの抽象的な分析です(循環的複雑度などのメトリックはコード品質を調べます)。

アルゴリズム分析については、Cormenの著書「Introductiontoalgorithms」が非常に優れていると思います。

アルゴリズムの複雑さを理解すると、代替アルゴリズムの方が優れているかどうか、またはアルゴリズムの改善をどこで行うかを確認できます。

計測

時期尚早の最適化を回避する:優れたアルゴリズムがあることが確実な場合にのみ、詳細を調べて測定する必要があります。

理論的な分析が正しいかどうかを確認し、技術的な実装を確認するには(主にホットスポットを検索して最適化するため)、マクロベンチマークツールJVisualVMなどのプロファイラーを使用できます。

于 2013-03-23T11:55:07.320 に答える
1

ほとんどの場合、プロファイラーが最適ですが、単純なストップウォッチを使用する方がよい場合もあります: http://docs.guava-libraries.googlecode.com/git/javadoc/com/google/common/base/Stopwatch.html

Basic usage:

Stopwatch stopwatch = new Stopwatch().start();
doSomething();
stopwatch.stop(); // optional

long millis = stopwatch.elapsed(MILLISECONDS);

log.info("that took: " + stopwatch); // formatted string like "12.3 ms"
于 2013-03-23T11:57:38.930 に答える