Heap Dump是什么?
Heap Dump 也被称为 堆转储文件,是一个Java进程在某个时间点上的内存快照。Heap Dump是有着多种类型的。不过总体上heap dump在触发快照的时候都保存了java对象和类的信息。通常在写heap dump文件前会触发一次FullGC,所以heap dump文件中保存的是FullGC后留下的对象信息。
堆转储文件是诊断内存相关问题的重要信息来源,例如内存泄漏,垃圾收集问题 和 java.lang.OutOfMemoryError,同时它也是优化内存消耗的重要依据。
- Allocations:堆中的实例数。
- Shallow Size:此堆中所有实例的总大小(以字节为单位)。其实算是比较真实的java堆内存
- Retained Size:为此类的所有实例而保留的内存总大小(以字节为单位)。这个解释并不准
- Depth:从任意 GC 根到所选实例的最短 hop 数。
- Shallow Size:此实例的大小。
- Retained Size:此实例支配的内存大小(根据 dominator 树)。
hallow Size基本能真是反应Java堆内存,而Retained Size却明显要高出不少, 因为Retained Size统计总内存的时候,基本不能避免重复统计的问题
总结
- 总体Java内存使用看shallow size
- retained size只是个参考,不准确,存在各种重复统计问题
- FinalizerReference retained size 大小极其不准确,而且其强引用的对象并没有被算进去,不过finilize确实可能导致内存泄漏
- native size再8.0之后,对Bitmap的观测有帮助。
编辑
GPU:www.jianshu.com/p/310c41c2e…
在手机设置,开发者选项,打开gpu绘制,手机就能看到图像, 红色是应该是 三层,再多也是红色。
Lint:www.jianshu.com/p/d6068542b…