1、移动学习在主界面时按如下顺序点击:
2、其实和 android内存分析 outOfMemoryError错误定位及分析策略(非显示图片造成) 中用eclipse前7步的设置一样,只不过这个速度更快一些,更方便一些(eclipse ddms模式下卡的要死要死~~~~)
4、按Shallow Heap降序排列后,如上图所示,其中 Shallow Heap代表:对象本身占用内存的大小,不包含其引用的对象。Retain Heap代表:如果这个对象被释放掉,那会因为该对象的释放而减少引用进而被释放的所有的对象大小。直观的说就是MainNewActivity占了312字节的内存,如果被释放掉的话会释放大于等于2888字节的内存。
5、在MainNewActivity右键->List Objects会出现两个选项:with outgoing references 和 with incoming references
with outgoing references是指 被该对象引用的对象 (这个对象持有了哪个类或方法)
with incoming references是指引用到该对象的对象(哪个对象或类持有了该方法)
点击with outgoing references后如图:
6、显示出MainNewActivity所持有的所有成员变量,activityInfo的所有信息等等,点击其中的termEnd右键with incoming references,列出所有持有该对象的对象:
7、即可看到LoadActivity、SettingsActivity、LoginActivity都持有该变量(该变量写在了BaseActivity里),所以很容易造成内存泄漏。改!
8、GC Roots:调用该对象的跟节点,例子如图:
9、如果在object4上右键 path to GCRoot -> exclude all phantom/weak/soft etc. references(去除所有的虚引用,弱引用,软引用) 就会得到调用该类的跟节点,例如:
10、可以看出实在DBManagerHelper中实例化sqliteOpenHelper时初次调用了sqliteOpenHelper。此方法在查询变量在哪里最初调用非常好使。
暂时先写这些~