如何使用 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:如何获取每个分发的每月成本明细?