使用VisualVM分析应用程序

时间:2013-12-11 13:56:27

标签: java profiling visualvm

想象一下,您有一个命令行应用程序,它接受输入文件并对其执行某些操作。现在假设您想要对此应用程序进行采样/配置。如果它是Visual Studio,您只需选择分析方法(采样/检测),VS将为您运行应用程序并在程序完成时收集数据。但据我所知,VisualVM中没有类似的功能。您必须运行您的应用程序,然后在VisualVM中选择它,然后显式开始采样/分析。问题是,有时使用某些输入数据执行程序所需的时间比设置VisualVM所需的时间短。使用这种方法也不可能批量配置应用程序。有人建议从Eclipse开始以调试模式启动应用程序,并在main()方法的开头某处设置断点。然后设置VisualVM并继续执行。但我怀疑在Debug vs Release模式下运行会对其自身产生性能影响。 建议?

2 个答案:

答案 0 :(得分:1)

如果程序执行I / O操作,Visual Studio采样器将看不到I / O,因为它是“CPU采样器”(即使几乎所有时间都花在等待I / O上)。

如果您使用Instrumentation,您将看不到任何行级信息,因为它只在功能级别汇总。

我使用this technique

如果程序运行得太快而无法采样,只需在其周围放置一个临时外环,比如100或1000次迭代。

调试和发布模式之间的区别几乎没有,除非您在紧密循环中花费了很长一段时间,在代码中,其中循环不包含任何函数调用,或者如果您正在进行在库中进行大量验证的数据结构操作。

如果你是,那么你的样本会证明你是,并且你会知道Release会产生速度差异。

就批量分析而言,我不这样做。我只关注该计划的整体吞吐率。如果有一些输入似乎需要花费太长时间,那么我使用该输入对程序进行采样过程,看看问题是什么,并修复它。

答案 1 :(得分:1)

VisualVM 1.3.6有一个新的Startup Profiler plugin,它允许您从启动时分析您的应用程序。有关其他信息,请参阅此article