如何使用 VisualVM 获取每个函数的时间成本 [重复]

Posted

技术标签:

【中文标题】如何使用 VisualVM 获取每个函数的时间成本 [重复]【英文标题】:How to use VisualVM to get the time each function costs [duplicate] 【发布时间】:2013-05-02 17:15:05 【问题描述】:

VisualVM 对我来说是一个不错但有点复杂的工具。

我编写了一个具有许多功能的类(在 Eclipse 中)。如何获取每个函数调用多少次以及执行期间花费的时间的信息?

【问题讨论】:

【参考方案1】:

其实很简单。运行您的程序,它将自动在 VisualVM 面板中显示为正在运行的进程。单击它,然后直接转到 Sampler 选项卡。最后,点击 CPU 和宾果游戏!在那里你可以看到每个函数花费的时间! (太棒了!)

【讨论】:

这应该是公认的答案。 OP 想知道的最简单的解决方案。 这应该是可以接受的答案。亲吻原则。直接回答,而不是阅读上面其他链接中的教程。【参考方案2】:

请参阅 Profiling With VisualVM, Part 1 和 Profiling With VisualVM, Part 2 以获取有关分析以及如何设置分析根和检测过滤器的更多信息。

【讨论】:

更详细的解释将不胜感激,谢谢@Tomas Hurka 对不起,您到底要我解释什么? @TomasHurka 他是对的,VisualVM 看起来和其他所有 Java 程序一样复杂。另外,我还没有得到任何工具可以完全满足 OP 在问题中的要求。 链接工作正常。【参考方案3】:

要进行详尽的分析,需要使用替代工具,例如JProfiler。

根据@TomasHurka 所说,您还可以使用 VisualVM (https://blogs.oracle.com/nbprofiler/entry/profiling_with_visualvm_part_1) 进行分析

【讨论】:

这是不正确的。除了内存分析之外,VisualVM 还可以做很多其他事情。 感谢@TomasHurka 我不知道该功能,为了清楚起见,将您的建议添加到已接受的答案中。【参考方案4】:

这可能对你有点帮助..

使用时间差来计算执行,方法是让方法返回一些东西。

  long before = System.currentTimeMillis();
  String responseFromMethod=methodCall(); // String value returned from method

  long totalResponseTime=((System.currentTimeMillis() - before )/1000); 

您可以为函数调用的次数保留一个计数器值。

对于 VisualVM,您可以使用 Eclipse MAT 来分析 heapdump 。它将解释您的程序需要改进的地方。

谢谢,

【讨论】:

以上是关于如何使用 VisualVM 获取每个函数的时间成本 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

Amazon CloudFront:如何获取每个分发的每月成本明细?

如何在 SQL 中获取一行和三列(使用每个信使的成本总和)?

visualvm-profile

如何使用 visualvm 查找内存泄漏

获取每个名称的总成本总和

如何减少 VisualVM 对堆使用的影响?