我最近发现我编写的一个程序出奇地慢,为了尝试修复它,我想对其进行分析。到目前为止,我选择的工具是 Yourkit 和 hprof,但我还没有找到我想要的功能。
理想情况下,我想要一个 MATLAB Profiler style heat-map对于我的所有源文件,颜色越强表明该行花费了更多时间。我意识到这个问题太多了,所以如果它不存在我也不会感到惊讶。
如果上述不可能,我希望能够执行 hprof cpu=samples 风格的分析,但不是吐出项目中执行的所有类的所有方法的列表,我想能够排除 namespace (例如:java.、scala.collection.),并且可以随时将这些方法重新归因于堆栈中的最低级别,其中调用的方法不在排除中命名空间。例如,如果我有类似以下内容
def sillyMethod: Unit = {
0.until(1000000).map{ i =>
(0 until 1000).toSeq + 1) == ( 0 until 1000).toSeq + 2 )
}
}
我更愿意知道我所有的时间都花在了sillyMethod上,而不是花在了Seq.equals上。任何可用的分析器都可以做到这一点吗?
编辑:我目前正在使用 sbt 执行命令,并使用 IntelliJ IDEA 进行实际编辑。
最佳答案
我已经很长时间没有查看你的套件了,但如果它的分析器无法排除包或限制分析包,我会感到惊讶。 JVM 实际上附带了一个还不错的分析器。 visualvm包含在jdk中。请注意 profiling page 上的第二个屏幕截图底部有一个“仅分析类”部分,因此如果您只将包放在那里,您将不会分析任何其他内容,或者您可以更深入地仅分析特定的包或类。
关于java - 针对特定包的 Scala/Java 分析,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7924255/