1

既存のアルゴリズムを最適化するプロジェクトに取り組んでいます。JIP と VisualVM を使用してコードのプロファイリングを行ったところ、主なボトルネックが発生しました。

ここで、メソッドで最も時間がかかるものを確認したいと思います。それを行う簡単な方法は何ですか?その情報を提供するプロファイラーはありますか、それともメソッドのすべてのステップでタイミングを開始し、それをファイルに書き込む必要がありますか?

編集:これは、コードが入力セットで実行されている間である必要があります

編集 2: 私が話しているメソッドは、合計 +/-500 秒のランタイムで 1 億回以上呼び出されます。したがって、コード内のすべての最適化により、大幅な改善が得られます。

4

3 に答える 3

1

実行中にコードを分析するツールを探している場合は、動的分析ツールを調査することをお勧めします。この記事では JTest (Java 用) について言及されていますが、残念ながら私はそれを使用したことがありません。

代わりに、 sootのような静的コード分析ツールを使用して、さまざまなレベルの成功を収めることもできます。ツールは、実行に最も時間がかかるコードの領域を特定します。

その他は次のとおりです。SonarJ, PMD, Kalistick

私がすすのようなツールを使用した方法は、それをビルド管理ツールにバインドすることです。したがって、maven の場合、次のように構成されます。

  <plugin>
    <groupId>net.ju-n.maven.plugins</groupId>
    <artifactId>soot-maven-plugin</artifactId>
    <version>0.1.1</version>
    <executions>
      <execution>
        <goals>
          <goal><!-- put the goal name here --></goal>
        </goals>
      </execution>
    </executions>
    <configuration>
        <!-- put your configurations here -->
    </configuration>
  </plugin>

次に、これを Maven プロファイル (できればビルド サーバー上) で実行するように構成し、結果を公開します。

実行する目標は次のとおりです。mvn soot:soot

コードを実際に実行せずに、コードに対して静的解析が実行されることに注意してください。

于 2013-02-28T14:20:06.393 に答える
0

JUnitBenchmarksが役立ちます。タイムスタンプを使用した「ブルートフォース」タイプのチェックはどうですか

メソッドの関連セクション間?

于 2013-02-28T14:29:38.523 に答える
0

時間を計ってはいけません。

デバッガーでスナップショットを取得して実行します。それは、それが何をしているかを最高のレベルまで示します。何をしていても、2 つ以上のスナップショットで実行しているのを見つけた場合は、バグと考えてください。それを回避できれば、かなりの時間を節約できます。

どのくらいの時間?修正するときにわかりますが、2 回表示するのに必要なスナップショットが少ないほど、節約できます。

「問題」が見つからないのではないかと心配している場合でも、心配する必要はありません。そのすべての詳細...

于 2013-02-28T19:24:01.973 に答える