需要知道如何使用分析器/使用哪个分析器

时间:2011-07-16 03:14:44

标签: java profiler

这可能看起来像一个愚蠢的问题,但在询问了有关stackoverflow的一些问题并查看其他人的问题后,通常有一件事情就是使用分析器来查看代码的哪一部分运行缓慢等等。

作为一名编程初学者,我是所有这一切的新手,但由于我正在创建更大更大的项目,我觉得这样的工具有时会被证明是非常有用的。唯一的问题是,我不知道如何使用它们。

通常,我使用JDeveloper在Java中编码,我在互联网上读到有一个内置的。我尝试使用它,但我想我真的不知道如何,因为我找不到哪些部分让我的程序变慢。我不知道是不是因为我不知道如何使用它,或者它是否因为不好而闻名,所以我想我会在这里询问我应该从哪一个开始。

我也安装了Eclipse并且知道如何使用它(当我编写一些Python时或者当我正在尝试Android开发的教程时使用Eclipse),所以如果有一个免费的分析器,我可以使用它在这两个IDE中,我真的很想知道它。另外,关于剖析器我需要了解的教程或基本内容对我有很大帮助。

先谢谢,对不起,我的问题不是关于编程,但这似乎是获取有关分析器的宝贵信息的最佳位置。

3 个答案:

答案 0 :(得分:3)

如果您正在寻找免费工具,jvisulavm是一个很棒的工具。它带有标准的JDK安装,其可执行文件通常位于JAVA_HOME的bin目录下,紧邻java,javac,javadoc及其兄弟。这是一个教程:

http://download.oracle.com/javase/6/docs/technotes/guides/visualvm/index.html

如果您正在寻找更高级的商业产品,YourKitjprofiler都很有趣。

答案 1 :(得分:3)

如果您感到困惑,so are most of the profiler vendors

首先要理解的是 - 程序并不慢,因为它们的部件很慢(瓶颈)。 他们很慢,因为他们做得比他们做得更多。他们有时间流失。

这就像一场赛马。 一个瓶颈将是赛道中的一个狭窄的地方,马匹必须堆积和减速。 时间流失就像是与第一条融合的另一条轨道,马徘徊并且必须经过额外的距离。 然后可能有另一条轨道与那条轨道融合,另一条轨道与之相连,依此类推。

可以避免的函数调用是一个耗时的例子。

Here's how I find time drains.它简单且与语言无关。 你甚至可以使用像 jStack 这样的简单工具来完成它。

Profiler制造商意味着很好,但他们受到一系列令人困惑的概念的阻碍。

例如“花费时间的地方”。如果这意味着“最经常发现程序计数器的地方”,那就像是马在错误的赛道上。 你可以尝试缩短赛道,但真正的问题是马甚至不应该在那里。即应该避免使用函数调用。

如“测量的统计精度”。你需要测量一下马绕错了赛道走了多长时间才能知道它在错误的赛道上吗? 不,你只需要拍摄快照(堆栈样本)。 在错误的赛道上越长,你就越有可能看到它。 如果你在那里看到两次,你就会知道问题所在。

比如称它为“CPU Profiler”,这是忽略I / O时间的借口。 有时耗时是你不知道的不必要的I / O. 那就像马停在燕麦袋上咀嚼一样。 如果您只能在马跑的时候拍摄快照,您将永远不会注意到。 你只会注意到时间长得可疑。

more where those came from ...

答案 2 :(得分:1)

使用分析器不是一项简单的任务,需要大量有关VM内部的背景知识。所以最好先阅读有关内存管理,热点等的内容。在Profiler帮助页面中可以找到一些不错的帮助,例如参见help for JProfiler

根据我的经验,当出现一些无法通过其他方式跟踪的严重性能问题时,我只需要使用分析器几次。在许多情况下,简单的事情(如日志中的时间戳)有助于解决性能问题。因此,使用分析器作为最后的手段。说,我听说人们定期使用它的情况。我虽然关于它,但从来没有让这个过程为我工作。

我无法找到任何能满足我的免费分析器。我在不同时间使用的商业广告是JProbeJProfiler。我更喜欢JProfiler,但都允许你得到结果。

通常,该过程从在Profiler中配置应用程序开始,并告诉它您要特别查看哪些类。当您在Profiler中启动应用程序时,将以这样的方式对类进行检测,以便记录有关执行和VM的信息。因此,在运行应用程序之后,您可以对其进行分析,以查看大部分时间消耗的代码以及大多数内存使用的对象。您还可以经常监视线程,监视器和其他内容。要利用所有数据,您需要了解有关VM内部和您正在分析的代码的大量信息。

祝你好运!