收藏到: Del.icio.us Google书签 Digg Live Bookmark Technorati Furl Yahoo书签 Facebook 百度搜藏 新浪ViVi 365Key网摘 天极网摘 和讯网摘 博拉网 POCO网摘 添加到饭否 QQ书签 Digbuzz我挖网 QQ书签 更多 Bookmark and Share

2009年5月14日星期四

JProfiler使用 -- Memory View


Memory View 包含以下部分
  • all objects view (JVMTI only):
    显示当前heap区所有的 dynamic class-resolved(动态类解析)的统计。这个视图只有在Java1.5(JVMTI)才可显示;-- The all objects view shows the dynamic class-resolved statistics for the current heap usage. This view is only visible if you profile with Java 1.5 (JVMTI).
  • recorded objects view
    recorded objects view显示记录的: dynamic class-resolved(动态类解析)的统计:生存和垃圾收集的类; --- the recorded objects view shows the dynamic class-resolved statistics for the live and garbage collected objects that have been recorded.
  • allocation call tree
    显示当前heap区域和垃圾回收兑现的分配树;
  • allocation hot spots view
    显示哪些方法负责创建选择的类;
  • Class Tracker:
    所跟踪的对象;

除非“record allocations on startup”被选中,在 profiling settings dialog中,data acquisition必须手工启动。重新启动的话,将会清除recorded objects view,the allocation call tree and the allocation hot spots view中的原有数据。只有the all objects view不受影响。
停止数据收集了,recorded objects 将会继续收集 garbage收集信息。
The heap walker能够对recorded objects显示分配调用栈(stack)的信息。
memory view集成heap walker。可以获取heap snapshot。


All Objects Views:
分类:
  • classes:
    每一行代表一个类。这是缺省的等级
  • packages:
    每一行代表一个package。sub-package不包含。
  • J2EE部件:
    每一行标识一个J2EE部件。是JSP以及Servlet等。

可以选择一个类、包,通过右键选择“Add Selection To Class Tracker”。如果class tracker没有录制,将会对配置在class tracker中的所有对象启动录制。如果class tracker用不同对象类型或者liveness类型录制,所有数据将会被清除---会有确认框。

Recorded Objects Views:
   只是显示被选择的哪些对象

    all objects view 和  recorded objects view比较类似,统计的内容相近,但是所选择的范围不同:
    双击某个类,会加载类的source code 和byte code

Allocation Call Tree:
   Allocation call tree显示所有线程(根据过滤条件过滤的) top-down call tree累积。

   通过右键菜单选择Calculate allocation Call Tree,选中第一个“Allocations cumulated for all classes”,选择适当的Liveness type,可以得到结果:
   可以通过这个,得到哪个消耗的时间最多。
   
Allocation Hot Spots View
    显示了调用的函数列表。只有调用的次数达到0.1%以上的才会包括在这里。
    可以查出:哪些函数调用频繁。

---------------------
总结:

通过Memory View,可以得出哪些占用的内存大,哪些类的变化比较频繁,哪些函数调用的次数多,消耗的内存多。

操作:
  • 通过 All Objects View 和 Recorded Objects View,可以得出在目前的系统中,哪些对象占据主要的空间。还可以随着时间的变化,看哪些类的变化比较频繁,Instance count或者size增长的比较快;
  • 通过Allocation Call Tree,可以通过层次关系,看出主要线程内部,哪些类占用的尺寸比较大
  • 通过Allocation Hot Spots,可以看出哪些method调用的比较频繁,
  • 通过Class Tracker,可以看出跟踪的某个对象的变化情况
通过以上方式,可以对程序进行优化



没有评论:

发表评论