常用Java Profiling工具的分析与比较

发表于:2014-3-17 10:27

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:ladooz    来源:51Testing软件测试网采编

分享:
  遥测种类
  TPTP:目前使用的 4.6.2 的版本只提供了线程 Telemetry。
  CodePro Profiler: 总共有五个类型:CPU, 内存 , 线程 , 载入的类以及垃圾收集。
  YourKit Java Profiler: 与 CodePro Profiler 相比,缺少载入类的监测。
  JProfiler: 与 CodePro Profiler 一样,总共有五个类型的监测方法。
  CPU 快照包含的统计数据类型
  TPTP: CPU 快照包含的统计数据有:
  包的组成关系,细化到包含的类及类中的方法。
  方法的调用关系:以每个线程为根节点的方法调用信息,对于树中出现的代表方法的每个节点,列出了该方法的运行时间或运行时间百分比,以及该方法被调用的次数。
  方法被调用情况:列出了直接调用某方法的其他方法,以及这些方法调用该方法的次数及相关运行时间。
  热点列表:包含了 CPU 占用时间排列前十的方法、类或包。
  CodePro Profiler: CPU 快照包含的统计数据类型有:
  包的组成关系,细化到包含的类及类中的方法。
  方法的调用关系。以树结构表示,根据根节点表示的对象的不同,分为三种类型:以每个线程为根节点的方法调用关系,以整个线程为根 节点的方法调用关系,以及以每个方法为根节点的方法调用关系。对于树中出现的代表方法的每个节点,列出了该方法的运行时间或运行时间百分比,以及由该方法 生成的对象个数和为这些对象分配的内存大小。
  方法的被调用关系。该关系以树结构表示,其中根节点为某个指定的方法,每个节点的子节点为父节点的调用者。
  热点列表:包含了 CPU 占用时间排前的一些方法。
  YourKit Java Profiler:CPU 快照包含的统计数据类型与 CodePro Profiler 类似;
  JProfiler:与 CodePro Profiler 相比,缺少以每个方法为根节点的方法调用关系。因此当要查看以某个方法为调用起点的调用关系时,需要到以线程为根的树结构当中去查找。另外,方法的被调用 关系不是以树结构来表示的,而是以图的方式来显示的,当调用关系比较复杂的时候,很难在一个屏幕中看到一个全局关系图。
  内存快照包含的统计数据类型
  TPTP:包含了类实例的内存分配情况,包括实例化的对象个数,以及这些对象的本身占用内存的大小。相对于其它 Java Profiler 工具,TPTP 的内存快照包含的统计数据类型比较少。
  CodePro Profiler: 包含的统计数据有
  类实例的内存分配情况,包括实例化的对象个数,以及这些对象的 shallow 和 retained 大小。(Shallow size 就是对象本身占用内存的大小,不包含对其他对象的引用;Retained size 是该对象自己的 shallow size,加上从该对象能直接或间接访问到的 shallow size 之和,即该对象被 GC 之后所能回收到内存的总和)。
  最大对象列表:包含了 retained 大小排前的一些对象。
  有可能存在内存泄漏的对象列表:包含了有可能存在内存泄漏的对象以及可能性大小。
  YourKit Java Profiler:与 CodePro Profiler 相比,缺少内存泄露对象列表这一项。
  JProfiler:与 CodePro Profiler 相比,缺少 retained size 统计数据及内存泄露对象列表。
  源代码定位功能,即在快照中选中某个类、成员变量或者方法时,可以在源代码中定位到对应的定义。
  TPTP:只能定位到某个类,无法定位到方法或其中的成员变量。
  CodePro Profiler: 拥有该功能,但是只能定位到类及成员变量,无法定位到方法。
  YourKit Java Profiler:可以定位到类、成员变量及方法。
  JProfiler:与 CodePro Profiler 类似。
  快照操作,主要从快照的获取、快照的保存及快照的比较这三方面进行比较。
  TPTP:当应用程序启动后,用户可以选择在适当的时候进行快照获取;这些快照不会自动保存,因此当 eclipse 关闭后,这些快照数据将会消失,但是用户可以通过 export 的方式将需要的快照保存下来。
  CodePro Profiler: 当应用程序启动后,用户可以选择在适当的时候进行快照获取;这些快照会被自动保存在 Eclipse Workspace 之外的一个临时的空间,当 eclipse 关闭后,这些快照将会消失,用户可以通过 export 的方式将需要的快照保存下来;CodePro Profiler 还提供了快照的比较功能,不过前提是这两个快照的类型必须相同(例如:都是以 sampling 模式或 BCI 模式运行的)。
  YourKit Java Profiler:当应用程序启动后,用户可以选择在适当的时候进行快照获取,针对内存快照,YourKit Java Profiler 还提供了自动获取快照的功能;这些快照会被自动保存到一个临时的文件夹中,eclipse 关闭后,这些文件不会消失;另外,YourKit Java Profiler 也提供了快照比较功能。
  JProfiler:工具会要求你指定一个目录来保存该 snapshot。
  性能,在 sampling 模式下,这些工具的性能相差不大,这里主要比较在 BCI 模式下的性能。
  TPTP:目前使用的 4.6.2 的版本没有 BCI 模式。
  CodePro Profiler:当程序比较大的情况下,采用 BCI 模式进行 profiling 的速度比较慢;另外,在获取内存泄露候选者的时候,速度也是相当慢。(当程序代码量 5 万行时,用 CodePro Profiler 进行 Profiling 需要 5 分钟,在获取内存泄露候选者时,需要花费 20 分钟)
  YourKit Java Profiler:BCI 模式下的运行速度还可以。(当程序代码量为 5 万行时,需要 1 分钟)
  JProfiler:感觉不出程序运行速度受影响。(当程序代码量为 5 万行时,需要半分钟)
  健壮性,采用 CodePro Profiler 对比较大的应用程序进行 profiling 时,很容易出现栈溢出的错误。
  结论
  TPTP 是一款基于 eclipse 的开源软件,且提供的功能比较简单,因此适用于基于 eclipse 开发的应用程序,且该应用程序比较简单的情况;Codepro Profiler 提供的功能相对来说比较丰富,且与 eclipse 的集成性很好,但是在性能方面有待改善,因此适用于基于 eclipse 开发的应用程序,且对性能要求不高的情况;YourKit Java Profiler,JProfiler 与 Eclipse 的集成性都属于一般,提供的功能也比较丰富,且性能不错,因此适用于对 eclipse 集成度要求不高,且对性能要求较高的情况。
33/3<123
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号