开发工具:
文件大小: 3mb
下载次数: 0
上传时间: 2019-07-06
详细说明:MemoryAnalyzer 使用中文 文档Me mory an a lyzer使用文档
2. Shallow or retained heap
Shallow Heap表小一个对象消费的内存的总量。对象的每个引用变量会占用32或64bit(取决于操作系
统),每个 nteger需要占用4byte,每个Long需要占用8byte,诸如此关的其他信息可以自行查询。Sha|low
heap的值可能是经过了调整的(比如对齐到8,具体取决于 Heap dump文件的柊式),以便更好地模拟虚拟
机的真实消费情况。
对象ⅹ的 Retained set指的是一旦X被垃圾回收后也会随之被GC回收掉的对象的集合。
对象Ⅹ的 retained heap指的是X的 retained set中所有对象的 shallow heap之和,或者说是因为对象Ⅹ
而保持ave的内存的大小。
通常来说, shallow heap就是对象自身在堆内存中的大小,而同个对象的 retained heap指的是该对象
被垃圾回收后释放的堆内存的大小
组 leading对象的 retained set(如一个特定类的全部对象、一个特定类加载器加载的所有类的全部对
象、又或者一串仟意的对象)在 leading对象集合中的对象全部不可达时被释放掉。 Leading对象集的 retained
set包括这些对象本身和其他的只能通过这些对象访问到的对象。而 leading对象集合的 retained size指的就
是 retained set中的全部对象的堆内存之和。如下图
6A和B是 GC Roots,比如方法参数,局部
对象,用在wait(、 notify(和
synchronized(方法上的对象等等
E Leading Set Retained Set
EC
C D.E. FG.H
AB
A.B.C. D.E. F.G. H
A
Minimum retained size提供了一种很好的佔算 retained size的方案。这种方案的计算速度远比获取精确
的 retained size快得多。因为这和计算方式只依赖于要查看的集合中的对象的数量,而非 Heap dump中对
象的数量。
致一思维翻译整理 zhe a. com
Me mory an a lyzer使用文档
3. Dominator tree
Memory analyzer提供∫一个 dominator tree(支配树)的概念来描述对象关系图。将对象引用图转为
dominator tree可以使你很容易地找到占用内存最大的一块以及对象之间的依赖关系。如下是对 dominator
tree的一些正式定义:
如果说对象X支配( dominate)了对象Y,那么在对象关系图中,从起始节点(或者说是根节点)到
Y的每一条路径都必须经过X。
对象Y的直接支配者{ mmediate dominator)X是距离对象Y最近的一个支配者。
Dominator tree基于对象关系图构建。在 Dominator tree中,每个对象都是它的子节点的直接支配者,
所以对象间的依赖关系很容易确认
Dominator tree有如下几个重要的特征:
Ⅹ的子树中的对象(也就是由ⅹ支配的对象)代表了X的 retained set;
如果ⅹ是y的直接支配者,那么ⅹ的直接支配者同样支配着y,以此类推
Dominator tree的边并不直接对应着对象引用图中的对象引用关系
下图是一张对象引用关系图与 dominator tree的对照图:
EH
E
ABC
4. Garbage Collection roots
个 garbage collection root(简称 GCRoot)就是一个可以从堆内存以外访问的对象。以下原因一个对
象成为 GCRoot:
致一思维翻译整理 zhe a. com
Me mory an a lyzer使用文档
System Class
由引导类加载器( bootstrap classloader)或系统类加载器( system classloader)加载的类。比如由rt」jar
加载的全部类,如java.uti.*
UNI loca|(局部N对象)
native代码编写的局部交量,比如用户自定义的N|代码或者ⅣM内部代码。
JNG|oba(全局N对象)
native代码编写的全局变量,比如用户自定义的JN代码或者』M内部代码。
Thread block
当前活跃的 thread block中引用的对象。
Thread
乜经启动的,仍未终止的线程。
Busy monitor(活跃的监控器)
所有调用了wait0、 notify(或者进入同步的对象或类(静态方法指的是类,非静态方法时是对象)。举例
说如调用了 synchronized( Object)或者进入了一个同步的方法。
」 ava loca
局部变量。指的是仍在线程栈中的方法的输入参数或者创建的局部对象变量
致一思维翻译整理 zhe a. com
Me mory an a lyzer使用文档
Native stack
native代码中的输入输岀参数,如用户自定义的」N代码,或者MM内置代码。通常是在这样的情况
下:一个方法中有 native代码参与,作为这个方法的参数的对象就成了 G CRoot。比如说用在文件操作或者
网络传输中的O方法的参数、或者用在反射中的参数。
Finalizable
进入等待队列,等待自己的 Finalizer执行的对象
Unfinalized
个有 fina lize方法的对象,但是尚未被 finalize也没有进入等待执行 fina lize的队列时
Unreachable
其他 GCRoot皆不可达的对象,但是也不会被MAT标记为 GCRoot。这种对象不会被纳入分析的范围
Java stack frame(Java栈帧)
Stack frame(堆栈帧)是一个为函数保留的区域,用来存储关于参数、局部变量和返回地址的信息。只
有在解析dump文件时将之视为一个对象来处理,才会认为其是一个 GCRoot
Unknown
未知类型的rot对象。一些dump文件,如1 BM Portable Heap dump文件,其中并不包含root信息。
MAT在解析这一类文件时,如果发现某些对象不存在任何引用信息或者对任何 G CRoot均不可达,那么这些
对象就公被认为是未知类型的 G CRoot。这样可以保证 G CRoot持有dump中的所有对象信息。
5.Incomming outgoing Reference
简言之, Incomming reference指的是引用当前对象的外部对象: Outgoing Reference指的是当前对象引
致一思维翻译整理 zhe a. com
Me mory an a lyzer使用文档
用的外部对象。
对象的 incomming reference保证对象处于aive从而免于被垃圾回收掉。
Outgoing reference则展示了对象的具体内容,有助于我们发现对象的用处。
基础教程
这里的基础教程可以用来作为熟悉 Eclipse Memory analyzer的一个出发点。
第一步:获取 Heap dump文件
Memory analyzer主要基于 Heap dump文件上作。 Heap dump文件中包含了在某个指定时间点上所有
ive状态的java对象的信息。现在所有Java虚拟机都有写 Heap dump文件的功能,但是具体的步骤随着提
供商、版木以及操作系统的不同而有些差别。
在这个教程中会尝试使用 windows下的jav8和 jconsole来下载 Heap dump文件。使用jva8启动一个
应用,打开< AVA HOME>/bin/ jconsole. exe,在 jconsole中选择正在运行的应用
图 JConsole:新建连接
N新建连接
O本地程L):
PD
sun. ools jconsole JConsole
358
注.将对近程启用管逆代逆:
O远程进程(r)
用法:( hostnamE》:〈pxt)或 =EVICE:jmx:< OroNocO1):〈sBp》
用户名()
口令(P
连接
取消
(在这个例子中选择的是 eclipse,虽然进程名称为空,但是通过重启 eclipse可以确认)。
建立连接后,选择页签 MBean,执行 com. sun. management. Hot spot Diagnostic下的操作 dumpHeap。
致一思维翻译整理 zhe a. com
Me mory an a lyzer使用文档
第一个参数p0是要获取的dump文件的完整路径名,记得文件要以 hprof作为扩展名(要在 Memory
Analysis Perspective下打丌扩展名必须是这个)。如果我们只想获取ive的对象,第二个参数p1需要保持为
true。
图Java监视和管理控制台-pid:3292
图连授窗口M帮助山
x
览内存线程类Ⅷ要ian
fementation
操作调用
com. sun. management
void
dumpHeap po base hpr of, p1 trul)
像 HotSpotDlagmostic
属性
MBeanOperationInfo
日操作
:.-dumpHe
名称
值
操作
setvmoption
名称
dumpHeap
aa.⊥ang
说明
dumpheap
是细向
java util. logging
Return
d
lang Stri
名称
值
操作:
opentype
liav ax. management, openrbe an. SimpleType (na.//
AlT
d
ljavex. management. openrbean SimpleType(na.
originally
Bva.⊥ang
11
openType
lava menagement. opsrurbe an Simpl Typs(na.
0r1g1n81ype
个乳n粤跟Hmn1H墨
佴牛人hmr
建议将导出的dump文件保存到一个独立的文件夹,在接下来的分析中会通过这个文件创建很多图表
文件。
第二步:0 overview(概览)
在 eclipse上通过Fle→> Open File来打开dump文件,之后会直接进入 Overview页。当然也可以打开
Memory analysisPerspective,这个通常需要于动调整下
致一思维翻译整理 zhe a. com
Me mory an a lyzer使用文档
ch Project Run Window Help
Q:95 New Window
Editor
Hide toolbar
Show view
Perspective
Open Perspective
Other
Navigation
Customize Perspective
Preferences
Save Perspective As
Reset Perspective
Close
ective
Close All Perspectives
marchy value
之后在弹出框中选择 Memory analysis即可
Open Perspective
E*Database Debug
tO Database Development
t= Debug
G Git
思
Jv吾
最 Java Browsing
H Java EE (default)
JAva Type Hierarchy
JavaScript
仲JA
Mer
Analysis
Planning
t Plug-in Development
EE Remote System Explorer
EResource
OK
Cancel
在 MemoryAnalysis Perspective下还可以使用File-> Open Heap dump打开dump文件。在 Memory
Ana lysis Perspective下 Overview是这样子的:
致一思维翻译整理 zhe a. com
Me mory an a lyzer使用文档
File Edit NEvigate Search Project Run Window Help
人图|
0107638
im阳·
日 urget ipse duin entalcur
i Overview
eclipse. j=t intemal coresearch. it
Q, crg ecipse,#: intemal ccra. search. processing JobM. Sizc: 64.6 MB Casses: 19k Objects: 1.5m Class Loadcr:416 Unreachable Obiscts Histogram
1a crg ccipsc osgiirtcrnalload=r. EquinoxclassLpadcr
DHU(shal cw size)
iD3, 772, GSG(eli rled size)
Biggest objects by Retained Size
GC root BIsy MonitOr
035.93
tics Attributes Class Ilerarcny Value
p2 Nama
beel. part:ipa…fal
javalikeN fals
ref parti., java.io File (a OxcIcO7318
savedlnd. jave io ile Oxc1c07000
tuezStaleyury.tchpstjulterra.compiler
a flugi..
bool. needTo5,, false
1.6 MB
exl nr.. org. dipse jdt nterna compile
org.eclipse jdt internal core search indexing IndexManager(o (Mc]cdl/hgX
nt availing.C
ool, activated
step By Step
Id Llistocram: Lists rumber of instances per
Leak Suspects: includes eak suspects and
rcf progress.…rull
He Dominator Tree: List the biggest objects
load
Top Components: list reports for
在右侧窗口上方的位置可以看到 heapDump的sze,以及类、对象和类加载器的数量。
右侧窗口中最醒目的饼图直观地显示了dump中最大的儿个对象。鼠标光标划过饼图中代表某个对象
的区块时可以在左侧 Inspector窗口中看到对象的细节,在区上点击鼠标左键可以通过菜单项钻取到关于
其对应的对象更多的细节。
第三步: The Histogram(直方图)
在工具栏中选择 histogram可以查看每个类的灾例的数量,以及sha‖lWse和 retained size
昌 base. hprof
川Q|·Q,园,函名
i Overview Histogram 53
Class name
Objects shallow Heap
Retained Heap
N
C charl
184.380
18864024
=18864,024
C java util. Hash MapSNode
206867
6683,74
=20.584224
java. lang String
155.732
373758217952008
C java util. Hash Maps NodeD
57,081
3.643358=23309536
javautil. Hash Map
72077
3459,696
≥=25339616
CintO
29626
3425418
=3426,408
C byte
792l
3409,152
=3409,152
C java lang, ObjectO
39,185
102320
>=16,787000
C java, util. Collections SUnmodifiableMap
60,776
1944832
=6,729000
Memory analyzer默认展示了每个对象的 retained size。然而同一组对象(在这里指的是同一个类的所有
致一思维翻译整理 zhe a. com
(系统自动生成,下载前可以参看下载内容)
下载文件列表
相关说明
- 本站资源为会员上传分享交流与学习,如有侵犯您的权益,请联系我们删除.
- 本站是交换下载平台,提供交流渠道,下载内容来自于网络,除下载问题外,其它问题请自行百度。
- 本站已设置防盗链,请勿用迅雷、QQ旋风等多线程下载软件下载资源,下载后用WinRAR最新版进行解压.
- 如果您发现内容无法下载,请稍后再次尝试;或者到消费记录里找到下载记录反馈给我们.
- 下载后发现下载的内容跟说明不相乎,请到消费记录里找到下载记录反馈给我们,经确认后退回积分.
- 如下载前有疑问,可以通过点击"提供者"的名字,查看对方的联系方式,联系对方咨询.