【问题标题】:Profiling Java Code分析 Java 代码
【发布时间】:2010-11-06 06:00:03
【问题描述】:

我正在尝试从源代码分析一个名为 Nutch 的 Java 网络搜索程序。据我了解,要进行分析,我需要在编译器中启用分析,以便生成要在 GProf 等程序中打开的配置文件。如果我编译软件的所有操作都是在源根目录下运行 ANT,我该怎么做?

【问题讨论】:

标签: java ant compilation profile gprof


【解决方案1】:

如果您运行的是较新的 JDK(最新的 1.6 更新 7 或更高版本),您无需做任何事情,只要准备好要分析的 Java 进程即可。只需使用JVisualVM(JDK 附带)附加到您的进程,然后单击配置文件按钮。

【讨论】:

  • VisualVM 似乎是我所追求的。谢谢。
【解决方案2】:

您在回复@Charlie 的回答时说,理想情况下,您希望了解有关程序如何花费时间的信息。

还有另一种观点 - 您需要知道为什么程序会花费时间。

每个周期花费的原因是一个原因链,其中每个链接都是调用堆栈上的一行代码。链条的强度并不比它最薄弱的一环强。

除非程序尽可能快,否则您就会遇到“瓶颈”。

例如,如果“瓶颈”浪费了 20% 的时间,那么它由 20% 的时间在堆栈上的可优化代码行组成(即合理性不佳)。你所要做的就是找到它。

如果从堆栈中抽取 10,000 个样本,则其中大约有 2,000 个。如果抽取 10 个样本,平均会在其中 2 个样本上。

事实上,如果你随机暂停程序几次并研究调用堆栈,如果你在 2 个样本 上看到可优化的代码行,你就发现了一个“瓶颈” . 您可以修复它,获得不错的加速,然后重复整个过程。

这是this technique的基础。

不管怎样,以gprof concepts 的形式思考对你没有好处。

【讨论】:

  • 这是一个有用的观点。该项目的最终目标不是优化此代码。真正的目标是确定何时何地可以使用 FPGA 来加快该程序的整体处理时间。所以在现实中,我想知道什么对我的程序的运行很重要,这样我就可以确定硬件加速的正确插入点。
  • @Dan:很有趣。不过,在你看来,我优化代码,因为虽然硬件加速很好,但你不知道,可能有一个因子 5 等待免费获取。当您从代码中榨取了所有可能的汁液时,样本将准确显示花费大部分时间的内容,以及硬件加速在哪些方面会有所帮助。我曾经遇到过这样的情况。祝你好运。
【解决方案3】:

你真的在这里问一个 Ant 问题。您可以将编译器的命令行标志作为属性添加到编译目标的 ant 文件中。请参阅<compilerarg> 标签here

顺便说一句,有很多很好的分析工具。看看this google search

【讨论】:

  • 谢谢,理想情况下,我想要一些关于 Nutch 如何使用时间的具体信息,特别是在使用 Lucene 调用时。我肯定会查看一些分析器的。这是我第一次使用此类软件。
猜你喜欢
  • 1970-01-01
  • 2013-04-02
  • 2012-01-10
  • 1970-01-01
  • 1970-01-01
  • 2018-10-05
  • 2016-04-27
  • 2012-10-27
  • 1970-01-01
相关资源
最近更新 更多