只分析Java应用程序的某些部分/类

只分析Java应用程序的某些部分/类

问题描述:

我正在编写一个读取输入,填充数据结构,然后对它们进行一些计算的Java应用程序。我想优化最后的计算部分,因为有了真正的大输入,它会支配执行时间。用巨大的投入来分析整个应用程序将会一直持续下去。因此,我为性能测试加载了中等大小的输入,但输入和预处理时间在配置文件中占主导地位。只分析Java应用程序的某些部分/类

我该如何配置一个我关心的java应用程序的部分?有没有办法说“只分析这两个类”,或者以编程方式插入“开始分析这里”指令?

您可以使用VisualVM来分析您的代码。我不知道只分析特定的类,但VisualVm可以开始观看已经运行的程序。另外,如果您使用的是Eclipse,则有一个启动程序可用于在您从Eclipse启动时启动并将分析器附加到程序。

编辑:
我做了一些前瞻性和事件探查器选项卡有一个设置复选框。当您选择此选项时,它将显示一个文本框,您可以在该文本框中设置筛选哪些类应针对CPU使用情况进行配置的筛选器。

+0

结合一个保存我的过滤器和明智放置的'Thread.sleep(5000)'的预设,它可以完成工作。 :)虽然这是最先进的技术,但令人伤心的是。 – 2012-02-23 17:52:09

我假设你有单元测试,你可以构造一个单元测试或应用程序,它只是对你感兴趣的部分进行分析。通过这种方式,您可以单独调整性能,因为它是唯一运行的。

+0

单元测试用非常小的输入测试正确性。即使在那里,大部分时间都花在预处理上。为了获得有意义的性能数字,我需要运行大量输入,这需要时间来加载。没有加载任何数据,我无法测试我的算法。 – 2012-02-23 16:26:32

+0

数据的实际情况如何?通常生成的数据更轻,可以给你逼真的性能结果。 – 2012-02-23 20:28:38

+0

如果您必须拥有真实数据,您可以在运行算法之前停止程序,开始分析并让程序继续。这样你只能分析从这一点开始运行的内容。 – 2012-02-23 20:29:33

至于只分析选定的类,大多数分析器允许设置过滤器,以便只有几个类被检测。

就你而言,它听起来像你还想在调用特定方法时启动和停止分析。

JProfiler,可以添加一个方法触发为所期望的方法和添加3个动作来触发:

  • 开始录制(与选定的CPU)
  • 等待当前事件结束
  • 停止录音(选中CPU)。

看看this screen cast,它显示了如何配置触发器。

免责声明:我公司开发JProfiler。