当前位置:编程学习 > JSP >>

Optimizeit Profiler概览

答案:
Optimizeit Profiler概览








 


 



本文通过介绍Optimizeit Profiler的一些主要特征来使你对它有个简要的了解。如果想要知道更多的信息,请查看Optimizeit Profiler用户手册。可以从Optimizeit Profiler单击主菜单info|help来查看所有的使用文档。

使用中有何问题,请随时与Borland Technical Support联系。

启动应用程序







Optimizeit Profiler是通过在一个独立的虚拟机上运行应用程序来收集有用的信息。

在运行一个java程序前,需要安装一个java虚拟机。Optimizeit Profiler默认配置是JDK 1.4 or 1.4.1。如果你想使用的另外的虚拟机,可以查看Optimizeit Profiler用户手册中的如何增加额外的虚拟机部分。

Optimizeit Profiler可用来测试任何类型的java程序:标准的应用程序、应用小程序、servlets、jsp,ejb等。本文所使用的都是演示程序,包含在Optimizeit quichktour目录下。文中所有的演示均可以此来完成。

1、  打开Optimizeit Profiler;

2、  如果你是第一次打开,将会自动弹出编辑设置窗口。如果已经打开,可以从file菜单下选择new setting,调出编辑设置窗口。

3、  在程序类型框中选择Application。

4、  单击"Program main class or Jar file"右面的“Browse…”按钮。

5、  找到\doc\profiler\quicktour\QuickTourApp.jar文件,然后单击open。

6、  Profiler会返回到设置窗口,并且自动带入程序的工作区和类路径。在Source Path框中,单击change…按钮。

7、  在Source path chooser窗口中,选择安装路径下的\doc\profiler\quicktour目录;选中\doc\profiler\quicktour\QuickTourApp.jar文件后单击窗口中的向下按钮把它加入到source path部分。

8、  单击ok增加到源文件中路径中。设置好后的对话框如下:





9、  单击Start now按钮。

10、             编辑窗口会自动关闭,并且Optimizeit Profiler自动加载事例程序。

使用Memory Profiler







当你是第一次使用该工具,Optimizeit自动打开到内存监视窗口:









内存监视器列出了被测程序中所有的类并且实时统计每个类的实例的数目。内存监视器默认是以堆模式打开,这样能够看到对象的创建和撤销。下面的步骤将演示将介绍如何控制内存监视器以便于分析被测程序的内存使用情况:







1、  单击内存监视器表头的instance count。这样将按照已分配的实例数来进行降序排列。







2、  在内存监视器窗口下方的Filters窗口中,输入你想观察的某个类,在filters框中输入Java.awt.*,并且按回车键;这样将只显示java.awt类的相关信息。







3、  我们可以看到,许多类的实例数要么增加,要么减少。增加是因为有实例生成,而减少是因为垃圾回收在起作用。如果要查看临时对象的创建,可以选中窗口右侧底部的Disable garbage collector按钮,这样Optimizeit将一直持续显示所有实例的数目。















4、  选中java.awt.Color类,然后单击Allocation Backtrace 按钮进入allocation backtrace 模式。你也可以在类名上双击进入。Backtrace信息显示了类的每个实例中的方法被调用的信息。







5、  在Allocation Backtrace视图中,可以以两种方式来查看信息:







l         Hierarchical view分层模式 默认显示树形图。在树形图中,某个方法可能显示在多个地方,在于谁调用了这个方法。但是在图形视图中,节点表示的方法仅显示一次。它仍然可以有多个父路径。







l         In the Aggregated view图表模式 每个节点将使用线连接起来,或者是到了边界只有一边有线。从有多个子节点开始,每条连线对应一个调用这个方法的方法。与树形不同的是,图表中可能存在循环。图表显示有助于进行跟踪。如果你想找出一条语句是如何被调用的,那么图表将是一种快速而简易的方法,通过图表你可以迅速地找出有父子关系的对象。







可以使用按钮 在两种方式之间切换。







6、  选中EventDispatchThread.run()行,单击左边的加号展开。单击比率最大的节点,直到展开Graphics2d.fill3DRect()行为止。















7、  双击Graphics2d.fill3DRect()行,将显示颜色实例分配的源代码。源代码将有助于你理解为什么绘制路径类产生了如此多的实例。fill3DRect方法分配了许多的颜色,是因为它调用了Color.brighter() 方法and Color.darker()方法。







注意:如果你是第一次使用者,你可能没有图中的源代码路径。







使用内存监视器,可以帮助你创建更少的临时对象。虽然临时对象经常很快便被析构,然而它会导致垃圾收集更加频繁。对于大多数java虚拟机来说,当垃圾收集器比较忙时,运行任何的java程序都会延迟几百毫秒。如果使用了过多的临时对象,由于这个原因会致使用户感觉到程序反应缓慢。







内存监视器同时有助于理解为什么垃圾收集器没有析构这些对象。例如,它将帮助我们我们了解当一个对象不再被使用时确实被垃圾收集器析构掉。下面的步骤描述了使用内存监视器来判断一个实例的产生和如何被垃圾收集器收集。







1、  单击 图标返回到堆模式。







2、  为了只显示与Image-related相关的类,可以清除fileters框中的内容,然后输入*image*,然后按回车键。







3、  选中javax.swing.ImageIcon行,然后单击图标 (显示实例和参考图),显示出了实例图:















窗口的上方显示了实例的字符描述。







窗口中间部分显示了所选实例对象参考和由对象所派生的实例。在这种情况下,因为ImageIcon对象被引用了,所以垃圾收集器没有收集。







窗口最下方部分显示了中间窗口所选实例的分配路径。可以看出实例是构造器QuickTourApp分配的。这个图像就是作为背景显示在程序中间的Optimizeit的logo。







内存泄漏经常是由于在程序运行中连续地引用对象,因此他们仍然占用资源。正因为如此,如果你能够定位到使用大量引用的对象,那么你就能够定位至对象占用资源导致内存泄漏的根源。为了能够定位到使用大量引用的对象,并且跟踪这些引用:







1、  打开内存泄漏检测,单击内存泄漏监测按钮 。







2、  为了查找可能的内存泄漏,Profiler需要比较一系列堆的状态。可以单击保存堆状态按钮 来创建。







3、  让quicktour程序运行15秒以上。







4、  再次单击保存堆状态按钮记录一个新的堆状态记录。你可以创建多个堆状态记录。







5、  From heap state表中为要作为比较的初始状态,To heap state表中为要与From heap state作比较的状态。每当选中From heap state表中的记录后,To heap state表中只能选择该记录之后的记录。







6、  窗口的中间部分显示了被比较堆状态记录之后新引用的资源。Count值是这个对象递增引用的数量。可以单击count表头进行排序。你可以选择一个引用来查看堆状态中所有与这个对象引用有关的对象引用。















7、  图中的对象将有连接线或者边界。从根节点开始,都有一个相应的引用。把鼠标移到节点上面,将会显示新引用的数目和该节点调用toString()的。把鼠标移到末级节点上,将会显示这个引用的实例变量名。







8、  在图的上方有两个滚动条:







使用详细程度滚动条来调节图表显示的详细程度。







使用缩放滚动条来调节图表显示的大小。







所有不同的颜色代表不同的意思:







l         蓝色节点为间接引用句柄。表示不是直接引用,而是引用的引用。







l         红色节点为引用句柄。表示是直接引用。







l         节点的引用越多,颜色越深。







l         后续连接显示为绿色线条。后续连接在引用中对于一个对象是更高层次的引用。所有的后续连接的边框为蓝色。在引用层次中前续连接是后续连接的一个引用。







l         当选择一个节点以后,与这个节点相关的引用将会闪烁显示。







l&

上一个:各类Java资源收集(更新中……)
下一个:《Java编程思想》(第二版)第08章:接口与内隐类

CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,