三款Java阐明器点评
副标题#e#
概述
谁实现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*来完成。
#p#副标题#e#
三种产物的快速较量
在我探究详细的阐明器特征(和非特征)之前,表格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/ #p#分页标题#e# 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. 设置的应用措施
#p#分页标题#e#
措施名 | World-on-a-Disc | Slave |
描写 | 用于CD/DVD-ROM的基于映射的多媒体引擎See http://www.worldonadisc.com/ | 普通的可插文件和目次处理惩罚器See www.lv2.clara.co.uk/slave.html |
实现的"独一致命弱点" | CPU-bound | I/O-bound |
包括的类的数目 | 35 | 60+ |
所有这三个阐明器都配送小型的演示应用措施。在利用这些东西评价措施之前,我以为很有须要熟悉每个阐明器,所以我爽性将它们的演示措施都玩了一遍。
Borland Optimizeit Suite
Borland的Optimizeit Suite是三者中最成熟,成果最齐全的阐明器包。订价$1,599 , Borland无疑并不想占领独立开拓者市场。它的阐明器由三个自由耦合的组件构成: Optimizeit Profiler、 Optimizeit Thread Debugger和Optimizeit Code Coverage。
Borland Optimizeit Suite的焦点特征
Borland的Optimizeit阐明器是用于CPU和仓库/工具评价的组合东西包。图2展示了一个典范的GUI屏幕快照。
Figure 2. Optimizeit Profiler的类实例图:悦目,但不顶用。
图2的类实例图将现实中的工具漫衍制成表格,按类分组而且凭据工具的几多举办排序。假如你之前没有利用过仓库阐明器,请对此做好筹备:不单在这个镜头中看到的你的措施低层实体大概完全让你感想疑惑,并且一旦你疑惑了,你同样看不到你的措施的源代码。
Borland的阐明器答允你点击任何类而且看清分派了的该类的实例地址的位置。阐明器不单汇报你存在分派的要领在那边(见图3),并且只要你双击要领名,就会弹出一个分派语句行的源代码阅读器。
Figure 3. Optimizeit 阐明器的工具分派回溯图。
假如你的措施饱受分派热点(即措施的某部门分派了太多的工具)之苦,可能你想追踪你措施中不该该呈现的真实工具的来历(如XML理会器中的抽象窗口东西包(AWT)的有颜色的工具,可能杂乱呈此刻只应该呈现呼吁行的实体中的Swing 工具),那么上述特征就很是很是有用了。
存储检漏仪(Memory Leak Detector)答允你较量你的措施的仓库的两种瞬象,从而有但愿找出被引用的工具中有几多就要断裂的被漏掉的工具。留意,尽量这个东西称做存储检漏仪,并且它也大大的削减了大海捞针的范畴,但检测存储裂痕仍然是一件难题的手工劳动。
阐明器的实例演示(Instance Display)也展现存储裂痕。 这个东西可让你深入到工具图表的非常精微的措施。你可以阐明你的应用措施中的任何一个真实工具的收支索引。我对这个实例演示的疑问就是: Borland没有为了东西的这个部门而利用传统的可视化图表;相反,这个东西利用的是表格和树的综合,如图4所示。
Figure 4. Optimizeit 阐明器的工具实例视图。
线程调试器被放在Borland的阐明器的第二个模块内。它由所有真实线程以及它们状态(运行,期待,调治,在本机输入/输出(I/O)设备上的阻塞)的及时显示,再加上几种其它的可辅佐你阐明死锁和资源瓶颈的视图构成。在及时的视图中,每个线程行汇报你工具锁定几多–措施称作"监控器"–线程有几多以及该线程锁住多久了。图5举例说明白一个典范的线程调试会话期。
Figure 5. 线程调试器的默认视图显示及时线程勾当和状态。
假如你曾经花过一段时间调试线程问题的话,你必定会同意下列特征使得线程调试器很是有代价:直接死锁检测和可视化(见图6)、线程争用、线程期待、和附加嵌套的锁定阐明。
Figure 6.线程调试器包括检测和显示死锁的逻辑。
Borland 的三件套中的第三个模块Code Coverage,作了一件相当好的事情,它向你展示 所有你系统的线程所调查到的措施部门。这个综合图将类按百分比列出,点击任何类城市弹出执行行用黄色显示的源代码视图。
Borland Optimizeit Suite的缺陷
Borland的三件套布局还不如一个布局,因为它只是一个将三个完全差异的措施放在一起的缺乏弹性的皮带。这就是说,假如你正在利用阐明器,接下来又想利用线程调试器做一些线程阐明,那你就要切换措施并启动一个全新的会话期。这就不是我们所说的模块组集成了。
#p#分页标题#e#
线程调试器确实可以利用过滤器特征,它可让你调解你必需艰辛完成的数据的数量。今朝,你不得不调查所有的真实的线程(从任何线程组信息中剥离出来的),就像调查颜色编码的彩虹带卷动的传送带一样:大度,但要将信号从噪音中疏散出来并不是一件十分容易的工作。 反应Java线程组层级的分层调查特征也不会呈现什么过错。别的,时间暗示的名目也可以改造:不打印Thread-2 waited 23507561 ms,改为Thread-2 waited 6 h:31 m:47.561 s 大概更会受到措施员的接待。
Optimizeit只要用字节显示工具,它就会利用124b的名目。像我这样一个已经灌了一些对象到很多的十六进制垃圾桶的老黑客,这种名目老是触发十六进制的 "B" déjà vu。我的大脑已经大大地将同样的信息名目化成124字节。
Code Coverage的源代码显示也是有一点花架子:它只是用黄色使得执行的代码行突出,而剩下的均为白色(即不突出显示)。这种要领看起来虽然不错,但假如它也认为紧挨被执行的代码之后的白色部门(包罗注释)也同样的被执行,那这个特征将会有用的多。功效大概要悦目得多得多,在显示的间隙还可以显示线程没有涉及的代码。
Quest Software的 JProbe Suite
Quest Software的JProbe Suite 在成果和价值上与Borland的Optimizeit Suite差不多。它也提供独立的东西模块来办理评价问题,模块有四: JProbe Profiler、JProbe Coverage、JProbe Memory Debugger、和JProbe Threadalyzer。
与其他两个阐明其刊行商差异,Quest Software单独发售个体模块组件;如JProbe Profiler一个就要$849 (包罗一年的技能支持)。
JProbe Suite的要害特征
JProbe的评价要了解合在JVM实现数据瞬象的观念上。你可觉得了今后的从头装载和后续的阐明生存瞬象,而且较量两种瞬象以找出不同。图7 显示了一个典范的JProbe Profiler窗口,它包括两个用于阐明的瞬象。
Figure 7. 一个典范的高级JProbe GUI显示用于(静态)阐明的评价瞬象。
敲击一下,中心瞬象要领暗示大都JProbe阐明已经离线,不再是及时的了。这种要领对付仓库阐明很有意义,可是对付CPU实现评价就过于严格了。
对付CPU评价的所有重要的任务来说,JProbe要么提供表名目视图(如图8),要么提供图表式视图(如图9)。它没有提供让你深入到挪用仓库分支的直觉的Swing JTree范例的视图。
Figure 8. 一个典范的JProbe Profiler表格显示收集的及时要领。
Figure 9. 用图表显示的JProbe 及时要领。
JProbe的第二个模块,Memory Debugger答允你利用多种方法对仓库瞬象举办操纵。 它也包括一个简朴而有效的利用实例阐明的成果,它答允你在启动利用实例之前从头配置收集的数据。Memory Debugger也答允你界说任何实例数的计较限度(Quest Software有点恍惚地称之为"断言"),在利用实例竣事的时候,假如类生成的工具高出了你的期望值这个计较限度就会提醒你。图10显示了JProbe的仓库提要图。
Figure 10. JProbe的仓库提要图是Memory Debugger模块的主视图。
Memory Debugger的实例细节图(图11)让你可以阐明出哪个工具涉及到了核心工具以及核心工具涉及到了哪个工具。
Figure 11.
引用图表视图(图12)答允你以一种光辉但常常无法抵挡的图表细节来阐明流入和流出的引用。
Figure 12.
假如缠在一起的意大利面条对你来说听起来就比如听二十世纪七十年月的减速火箭的话, Memory Leak Doctor显示的工具引用链有产保留储漏掉的潜在大概(图13)。Leak Doctor 可让你在一个仓库瞬象上实现"假如我删除一个引用会奈何"的试验,而且看看这种操纵可否办理你的存储漏掉问题。
Figure 13.
Memory Debugger的又一个有用的机能是Garbage Monitor;它可以追踪用于临时存在的工具如幕后的工具StringBuffer之类的分派热点。这种工具可利用语法级的字符串举办串联(与API级此外串联相反)。
JProbe的 Threadalyzer是JProbe Suite的线程阐明模块,并有着足以孤高的、可以自动检测问题的很多有用的机能。这些问题有:
· 死锁(现有的和潜在的)
· 线程迟延
· 数据竞争
可是,办理这些以外的其他方面的机能,GUI就远远没有那么直观了。
#p#分页标题#e#
JProbe Suite的活页(纸)文件的编写和设计(在机关、屏幕快照的利用、和图标方面)应该说做得相当好。并且更进一步的是,它还汇报读者一些有代价的技能机能阐明的要领和能力,而且就如何将阐明集成到你的软件开拓要领中去提出一些根基的发起。
JProbe Suite的缺陷
尽量JProbe在东西市场占的份额高,我对付它的粗拙和不成熟仍然感想失望。它看起来感受就像一个存在了多年可是却没有从偶然的信手从头设计这种增长需求中获益的软件。因此JProbe Suite 5.0则在经典的"特征化"的重压下呻吟。我发明JProbe只有少少数方面才真正直观可能成果相当强大。学会利用JProbe是一件真正坚苦的任务。Memory Debugger中从左边、右边和中间弹出的GUI很不直观,尤其让人感想疑惑,并且我在很多的处所彻底疑惑了。
其它的JProbe 问题有(无牢靠顺序):
· 难于表明和交互的图形显示(图形和要领按时)
· 由杂乱的十六进制数识别工具,而不是由它们的更为开导性的toString()暗示法识别。
· 东西栏图标对付我的二十英寸、1280 x 1024 像素的屏幕来说实在是太小了。
· 要领当令表格只显示文字数字的数据信息,而不是文本、图表和颜色的综合信息。
· 在下列三种模块的表格中利用了三种差异的外观:Code Coverage、 Garbage Monitor和 Profiler。
· 仿佛尺度的Swing组件没有用在表格中,导致了没有一个尺度的外观。
· 太多差异的窗口/视图很少表示出整体的连贯性可能主要构想。
· 在线辅佐有时递交的是被粉碎的文本(大概在JProbe利用的JavaHelp中呈现妨碍)。
· 数不清的窗口通过一大串按钮点击来毗连,可是却没有返回/前进机制。
· 陈诉打印可以删掉:PDF发生之后发送到Acrobat Reader(安装一下就可以了)。我的测试设备上已经有了一个Acrobat 4.0 ,可是Acrobat 与陈诉打印模式不兼容:"文件打开呈现错误。文件不存在"。
· 在Code Coverage模式中,Generate Report对话框打开时竟然比我的1024行的桌面还要高(OK 和Cancel 按钮完全不在屏幕上了!)
ej-technologies的 JProfiler
假如你以前没传闻过ej-technologies公司,那也没什么好诧异:作为一个2001年才创立的德国公司,ej-technologies公司在Java东西市场确实是后起之辈。它在2002年2月刊行JProfiler 1.0版本,并在2003年4月刊行它的2.2.1版本(本文提到过)。(它同时也出产开放式源代码Java类库类文件API 和类阅读器。JProfiler利用这类阅读器 )ej-technologies公司的降生和旗舰产物的问世代表着JProfiler的设计已经从庞大数量的后见之明中获益:它的GUI比Quest Software公司的JProbe Suite要容易操纵的多。
JProfiler的焦点机能
JProfiler 与前面两个阐明器不同甚大,因为它回收了可以检测差异阐明标准的统一东西: 他只由一个东西构成。这个东西只是利用了四种差异的视图配置,可让你从差异角度阐明你的措施,并且不必重启会话期可能切换到差异的措施。比起那些东西片段组合来说,这个要领的简朴性和对称性要讨人喜欢,要有意义的多。并且在那些东西中,用户接口彼此不连贯,成果判定也较量武断,这些缺点把东西的优势全粉碎掉了。
四种JProfiler 视图配置是:
1. 存储视图(仓库和工具图表阐明)
2. CPU 视图(要领当令性)
3. 线程视图
4. VM 遥测视图
这些视图可以细分到形成产物中心的子视图。图14显示的Profiler有本身的要害Views下拉菜单。
Figure 14.
尽量Views菜单清楚地反应生产物的整体布局,视图之间的快速切换只需要在左边的垂直东西栏中点击就可以了,然后在窗口按钮的跳格键中随意地选择一个指定的范例。
要领计时可用作要领挪用树,它可以显示时间耗损和绝对时间耗损的百分比。图15显示的正是这种树。
Figure 15. JProfiler的挪用树视图(三个CPU视图中的一个)。
#p#分页标题#e#
JProfiler答允你左击与挪用树的每一行关联的上下文菜单 ,从而深入到耗损周期要领的源代码可能字节码。单个线程可能线程组可过滤要领评价的信息。JProfiler 也有一个子视图,它可列出由JVM识此外代码热点,这些代码已经编译成当地代码。
几种存储视图支持仓库阐明。图16显示的监控器子视图与Borland 的雷同。
Figure 16. JProfiler的类监控器视图(四个存储视图中的一个)。
将高端技能指标集成到一个易于操纵的GUI上,这是一件了不得的工作,但JProfiler的Heap Walker 模块(图17)却是它的独一败笔。它的六个子视图的子视图更象一个措施内部的措施,它应该会合办理它的有效利用问题,而不是扩展产物的其它机能。
Figure 17. JProfiler’s Heap Walker 主页图。
线程视图配置的五个子视图会合处理惩罚:线程的已往状态和当前状态(运行、期待、和阻塞)、监控器的已往利用和当前利用、以及监控器的统计表。这些视图比直接调查原始数据要好一点。可是这些视图中没有一个可以自动的智能的辅佐你识别竞争条件、死锁、可能线程的其他恶梦。图18显示的是一个典范的线程视图。
Figure 18.
VM 遥测视图配置的五个差异的及时转动曲线图显示:仓库空间的利用环境和空闲环境、工具数(有助于分出分列和非分列两类)、已经装载的类数、垃圾收集器的勾当、和线程数。图19 显示了这种视图配置。
Figure 19.
JProfiler的缺陷
JProfiler的 CPU 阐明器中缺少的一个简朴特征就是Reset可能Clear Data呼吁。 譬喻,当你阐明一个Swing应用时,应用措施装载和初始化进程中收集的数据,与激活应用措施某个特征时收集的数据,这两种机能数据有着本质的不同。可是,一旦装载了测试应用措施,我就会排除记载,以便会合处理惩罚详细的利用案例。今朝, JProfiler不支持这种基天职析模式。
JProfiler的在线辅佐过于简朴,它缺乏实例、具体的指南以及GUI屏幕快照。尽量JProfiler 是这三个阐明器中最直观地阐明器,可是缺乏足够的在线辅佐使得它的Heap Walker 模块更难领略。
竣事语
尽量不消阐明器对你的应用措施举办评价也有大概编写出不变的Java应用措施,但你也知道啃下这块硬骨头将带给你很多很多贫苦。任何持续运转几天可能几个礼拜(甚至几个月)不中断的应用措施必需确认是不变的。为了这个,你必需十分彻底地逐条测试你系统的内部运行行为。
所有这三个阐明器都能处理惩罚我的两个尝试应用措施。在我的900-MHz的设备上,阐明器的评价勾当减慢了应用措施的速度,可是阐明器阐明可能调试任务的勾当却没有。
在这三个阐明器中,我喜欢Borland的 Optimizeit Suite和ej-technologies的JProfile,虽然它们照旧有潜力改造的。ej-technologies的JProfiler的价值照旧很有竞争力的,它对付小局限的公司的吸引力很大,可是大一点的公司毫无疑问会青睐 Borland的 Optimizeit Suite ,因为它的成果配置要富厚一些。假如你为你的团队挑中Optimizeit,留意Borland的 JBuilder 8.0和9.0 (企业版)已经包括了集成到JBuilder IDE 上的Optimizeit Suite 5.0。
最后,我不得不认可,为了推荐Quest Software的JProbe Suite,我的头都大了。评价现实糊口中的Java系统是一件高能力、高技术、和费时的事情,并且你最不想见到的一件事就是:阐明器使得你的事情越发坚苦,你会发明它不单没有简化你的事情,而是把它弄得越发巨大。JProbe Suite 的很多机能需要改革的处所就是改造GUI的设计,使得它具有整体连贯性,因为此刻的它阐明代码时太不连贯了,让人总是感受悲观,的确是无法忍受了。