我正在开发一个优化现有算法的项目。我用JIP和VisualVM描述了代码,并且遇到了一个主要的瓶颈。
现在我想看看方法花费的时间最多。有什么简单的方法可以做到这一点?是否存在可以为我提供信息的分析器,或者我是否需要开始计算方法中的每个步骤并将其写入文件?
编辑:这应该是代码在inputsets上运行
编辑2:我正在谈论的方法被称为1亿次+次,运行时总计+/- 500秒。因此,代码中的每个优化都将有显着的改进。
答案 0 :(得分:1)
如果您正在寻找在执行代码时分析代码的工具,您需要调查dynamic analysis tools。文章中提到了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
请注意,静态分析是在代码上执行的,而不实际执行代码。
答案 1 :(得分:0)
JUnitBenchmarks可以提供帮助。那些带有时间戳的'强力'类型的支票
方法的相关部分之间?
答案 2 :(得分:0)
不要通过测量时间来做到这一点。
通过在调试器中抓取快照来实现。这将向您展示它正在做的最好的水平。 无论它在做什么,如果你抓住它在两个或更多快照上做它 - 认为它是一个错误。 如果你可以避免它,你将节省大量的时间。
多少时间?你会发现什么时候修复它,但看到它两次拍摄的快照越少,你就会节省得越多。
如果你害怕它不会发现“问题”,不要担心,它会,这可能是你没想到的。 More on all that ...