java - 如何检查方法的哪一部分使用时间最多?

标签 java profiling micro-optimization

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

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

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

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

最佳答案

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

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

其他包括:SonarJ、PMD、Kalistick

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

请注意,静态分析是在代码上执行的,而不是实际执行代码。

关于java - 如何检查方法的哪一部分使用时间最多?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15137719/

相关文章:

java - 分析 Java : find out where threads spend time blocked

java - 为什么 VisualVM 中的 CPU 时间不加起来?

assembly - 为什么 Intel 的编译器更喜欢 NEG+ADD 而不是 SUB?

汇编函数地址表和函数下或数据段中的数据

sql - 创建针对 FULLTEXT 搜索优化的第二列有什么意义吗?

java - Apache http 客户端默认值不适用于 sni

java - CloseableHttpClient 在 OpenShift tomcat pod 上返回 504

java - 读取文件时的唯一分隔符

android - 如何识别 Android 中的内存泄漏?

Mac 上针对 Java6 的 JavaFX 构建