1

我正在开发一个优化现有算法的项目。我用 JIP 和 VisualVM 分析了代码,发现了一个主要瓶颈。

现在我想看看在方法中花费最多时间的是什么。有什么简单的方法可以做到这一点?是否有分析器可以为我提供该信息,或者我是否需要开始计时方法中的每个步骤并将其写入文件?

编辑:这应该是代码在输入集上运行时

编辑 2:我正在谈论的方法被称为 1 亿次以上,总运行时间为 +/-500 秒。所以代码中的每一次优化都会有显着的提升。

4

3 回答 3

1

如果您正在寻找在代码执行时分析代码的工具,您将需要研究动态分析工具。文章中提到了 JTest(用于 Java),但恐怕我还没有使用过它。

您也可以使用像soot这样的静态代码分析工具,取得不同程度的成功。这些工具将识别代码中执行时间最长的区域。

其他包括:SonarJ, PMD, Kalistick

我使用 soot 等工具的方式是将其绑定到我的构建管理工具中。所以对于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

不要通过测量时间来做到这一点。

通过在调试器中抓取快照来做到这一点。这将向您展示它正在做的最好的水平。不管它在做什么,如果你在两个或更多快照上发现它在做 - 认为它是一个错误。如果你能避免它,你将节省大量时间。

多少时间?当你修复它时你会发现,但是看到它两次的快照越少,你保存的越多。

如果你害怕它找不到“问题”,别担心,它会的,而且这可能是你没想到的。更多关于这一切......

于 2013-02-28T19:24:01.973 回答