本文回顾了三种商用Java分析器并且判断出哪一种分析器更容易满足开发人员的需要
导航目录:
慨述
分析器原理
三种产品的快速比较
测试平台
Borland Optimizeit Suite
Quest Software的 JProbe Suite
ej-technologies的 JProfiler
结束语
概述
谁实现Java应用程序的时候不出点问题?嗯,让我们诚实一点吧...代码分析器就是解决这个普遍问题的唯一的自定义工具。在本文中, Laurence Vanhelsuwé将为您回顾三种商用的Java分析器:Borland的Optimizeit Suite、 Quest Software的 JProbe Suite、以及ej-technologies的JProfiler。
现在的软件是一个如此笨重的、如此多面性的家伙,以致没有一个开发工具可让程序员随心所欲的完成他们的构想。甚至是运行--这个难以捉摸的尺度,当我们的代码在二档挣扎时恨得它要死;而当我们的代码以一档的速度运行时,我们却爱得它要命--它包含了太多相关方面。
性能方面公认的问题有:主观的用户感知程序速度及响应速度。如果我们暂时排除用户方面的因素,那么评价运行速度就等于客观实现方面的总和。这些方面有:算法选择、整体内存的使用、对象的动态分配和释放、以及多线程设计与运行行为。帮助你理解你的程序在运行时的维数选择就是代码分析器的繁重工作。
在本文中,我考虑了三种商用Java分析器并且判断出哪一种分析器更容易满足你我的需要:
· Borland的 Optimizeit Suite
· Quest Software的JProbe Suite
· ej-technologies的JProfiler
分析器原理
不必惊奇,这三种产品有许多共同点。所有现代分析器都是从同一个起点和约束开始的: Java 虚拟机分析器界面(JVMPI) (参考其他栏的 "The Java Virtual Machine Profiler Interface")。Sun微系统的API允许工具开发商接口或者连接到遵循JVMPI的JVM上,并且监控运作的方式以及JVM运行任何Java程序时的关键事件--从单独的应用程序到 applet、servlet和企业JavaBeans (EJB)组件。
假定JVMPI强加给所有的分析器工具开发商一个标准的、同等的游戏场,那么区分开发商高低的因素只在于工具的元特征(如,添加重要数值到原始JVMPI数据和功能上的特征,更为重要的是,绘图用户界面(GUI)应该针对这些特征进行开发),这也应该没什么稀奇的了。
在你看到该产品回顾的余下部分的时候,它的每一个自我形成或者自我突破的GUI都有自己的方法来解决如何开发原始的JVMPI 特征的核心问题,以便可以最大化分析和调试的效率。不幸的是,很多用到大型数据库的应用程序都采用可视化的、直观的真正友好的用户界面,但没有一个分析器能说服我:它们在这方面做得比较成功。
回顾的这三个分析器几乎都有着同样的分析会话期配置能力。所以在这我只是简短的提一下,并且继续进行比较:
· JVM 选择
· 要分析的程序的选择
· CLASSPATH 和资源路径选择
要启动评价会话期,所有这三种产品都要求你选择JVM,我们通常JVM上运行应用程序。一旦你选择了JVM,你必须指定你的程序的主类,或者可执行的jar文件,如果你的程序要参数的话,也要指定哪种参数 。最后,为评价会话期设置CLASSPATH通常也要你指明你的源代码层上的工具。图1展示了一个典型的会话期配置对话框。
Figure 1.
在分析器内启动一个程序意味着生成、捕捉、和观察大量数据,所以所有的分析器都包含着不同的方法来控制数据的流动,在不同的标准以及每一封装包的基础上进行过滤。同样也可以使用灵活的正规表达式类型模式如java.util.*或者jav*来完成。
三种产品的快速比较
在我探究具体的分析器特征(和非特征)之前,表格1 展示了每个产品关键点的属性矩阵:
Table 1.属性矩阵
|
|
Optimizeit Suite |
JProbe Suite |
JProfiler |
|
版本 |
5.0 |
5.0 |
2.2.1 |
|
价格 |
$1,599 |
$2,0001 |
$499 |
|
免费评价 |
Yes |
Yes |
Yes |
|
在线(安装)帮助 |
Yes |
Yes (JavaHelp) |
Yes (JavaHelp)2 |
|
有无上下文相关帮助? |
Yes |
Yes |
Yes |
|
安装指南 |
Yes |
Yes |
No3 |
|
白皮书文件 |
No |
Yes |
No |
|
工具模块数 |
3 (Profiler, Thread Debugger,Code Coverage) |
4 (Profiler, Coverage,Memory Debugger,Threadalyzer) |
0 (all-in-one) |
|
工具模块是否单独出售? |
No |
Yes |
No |
|
CPU 分析器 |
Yes (不实时) |
Yes (不实时) |
Yes (实时) |
|
对象/堆栈 分析器 |
Yes |
Yes |
Yes |
|
线程分析器 |
Yes |
Yes |
Yes |
|
死锁检测 |
自动并可见 |
自动 |
手动 |
|
路径条件检测 |
No |
Yes |
No |
|
代码覆盖 |
Yes |
Yes |
No |
|
多JVM支持 |
Yes |
Yes |
Yes |
|
深入到源代码 |
Yes |
Yes |
Yes |
|
深入到字节码 |
No |
Yes |
Yes |
|
远程评价* |
Yes |
Yes |
Yes |
|
自动评价** |
Yes |
Yes |
Yes |
|
IDE 集成 |
Yes |
Yes |
Yes |
|
生成报告 |
Yes |
Yes |
Yes |
|
主机平台许可政策 |
多平台和单一平台许可 |
单一平台许可 |
多平台 |
|
网址 |
http://www.borland.com/optimizeit/ index.html |
http://www.jprobe.com/ |
http://www.jprofiler.com/ |
|
易于使用度 |
7/10 |
4/10 |
8/10 |
注释:
* 远程评价:在你的开发设备之外的其它设备上评价你的Java程序的执行
** 自动评价:实现无人看管的通宵的评价会话期;换句话说,不使用GUI驱动的命令列队
1 JProbe Suite的价格包含一年的Gold Support (即技术支持)
2 ej-technologies的JProfiler的在线帮助几乎不包含任何的视图或者对话栏
3 ej-technologies'缺乏明确的指南将由某些演示会话期作出补偿
测试平台
我惊喜地发现:从对宿主操作系统(OS)到对JAVA虚拟机的不同版本, 分析器对不同的平台都有广泛的支持。实际上,大多数分析器支持每一个与商业相关的主机和/或JVM实现(这归功于大量的排列,查看更多细节请浏览开发商的产品网站)。一个例外就是Borland和 Quest Software的分析器都不支持Windows 98。据说是因为Windows 98 在实时精确度的处理方面不是一个"认真的"OS。(Windows 98通过它的公共API显然只能提供50-ms嘀嗒信号的精确度, 毫无疑问,通过这样一个粗糙的计时器的网络许多方法将会以失败告终)所以,在一个配置为900-MHz Athlon CPU、256 MB RAM 、运行Windows XP (Service Pack 1)的单独的PC机上,我把这三个分析器都测试了一下。
为了方便组织这篇回顾,我将测试限制在单独的Java 2平台、标准版(J2SE)应用程序内。 尽管这三种分析器明确表示支持servlet评价或者运行在不同应用服务上的EJB组件,他们的开发商也想借此尽力打进J2EE市场,但我还是没有测试Java 2 Platform、 企业版(J2EE)应用程序。
你必须熟知应用程序的结构和实现,才能从使用分析器中获得新知识,所以我主要依赖于我自己的两个真实的作为评价试验品使用的应用程序(见下面的表格2)。
Table 2.