常用 Java Profiling 工具的分析与比较
2010-08-13 00:00:00 来源:WEB开发网最大对象列表:包含了 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 集成度要求不高,且对性能要求较高的情况。
更多精彩
赞助商链接