Android AndroidStudio MAT LeakCanary 内存分析之 DDMS+MAT
2016-06-22 16:51
676 查看
Android AndroidStudio MAT LeakCanary 内存分析之 初识内存泄漏
http://blog.csdn.net/qq_28195645/article/details/51733342
Android AndroidStudio MAT LeakCanary 内存分析之 AndroidStudio 内存泄漏分析 Memory Monitor
http://blog.csdn.net/qq_28195645/article/details/51734506
Android AndroidStudio MAT LeakCanary 内存分析之 LeakCanary
http://blog.csdn.net/qq_28195645/article/details/51734987
Android AndroidStudio MAT LeakCanary 内存分析之 DDMS+MAT
http://blog.csdn.net/qq_28195645/article/details/51735522
按照以上三步 导出 然后通过MAT打开、会发现以下问题
Unknown HPROF Version (JAVA PROFILE 1.0.3)
原因是: android的虚拟机导出的内存文件hprof文件格式与标准的 java hprof文件格式标准不一样,根本原因两者的虚拟机不一致导致的。
只需要使用SDK中自带的转换工具转换就可以了
hprof-conv 源文件 目标文件
在OQL(Object Query Language)窗口下输入的查询命令可以获得所有在内存中的Activities
在打开的新窗口中,你可以发现,你的Activity是被this0所引用的,它实际上是匿名类对当前类的引用。this0又被callback所引用,接着它又被Message中一串的next所引用,最后到主线程才结束。
任何情况下你在class中创建非静态内部类,内部类会(自动)拥有对当前类的一个强引用。
一旦你把Runnable或者Message发送到Handler中,它就会被放入LooperThread的消息队列,并且被保持引用,直到Message被处理。发送postDelayed这样的消息,你输入延迟多少秒,它就会泄露至少多少秒。而发送没有延迟的消息的话,当队列中的消息过多时,也会照成一个临时的泄露。
http://blog.csdn.net/qq_28195645/article/details/51733342
Android AndroidStudio MAT LeakCanary 内存分析之 AndroidStudio 内存泄漏分析 Memory Monitor
http://blog.csdn.net/qq_28195645/article/details/51734506
Android AndroidStudio MAT LeakCanary 内存分析之 LeakCanary
http://blog.csdn.net/qq_28195645/article/details/51734987
Android AndroidStudio MAT LeakCanary 内存分析之 DDMS+MAT
http://blog.csdn.net/qq_28195645/article/details/51735522
下载MAT打开hprof文件
http://www.eclipse.org/mat/downloads.php我们可以直接通过Monitor来获取hprof文件、
详见 Android AndroidStudio MAT LeakCanary 内存分析之 AndroidStudio 内存泄漏分析 Memory Monitor我们也可以通过DDMS来获取到、
怪麻烦、还是通过上面的方法吧按照以上三步 导出 然后通过MAT打开、会发现以下问题
Unknown HPROF Version (JAVA PROFILE 1.0.3)
原因是: android的虚拟机导出的内存文件hprof文件格式与标准的 java hprof文件格式标准不一样,根本原因两者的虚拟机不一致导致的。
只需要使用SDK中自带的转换工具转换就可以了
hprof-conv 源文件 目标文件
通过MAT打开并进行分析
在OQL(Object Query Language)窗口下输入的查询命令可以获得所有在内存中的Activities
在窗口输入 select * from instanceof android.app.Activity 按Ctrl + F5或者!按钮
在打开的新窗口中,你可以发现,你的Activity是被this0所引用的,它实际上是匿名类对当前类的引用。this0又被callback所引用,接着它又被Message中一串的next所引用,最后到主线程才结束。
任何情况下你在class中创建非静态内部类,内部类会(自动)拥有对当前类的一个强引用。
一旦你把Runnable或者Message发送到Handler中,它就会被放入LooperThread的消息队列,并且被保持引用,直到Message被处理。发送postDelayed这样的消息,你输入延迟多少秒,它就会泄露至少多少秒。而发送没有延迟的消息的话,当队列中的消息过多时,也会照成一个临时的泄露。
相关文章推荐
- 使用C++实现JNI接口需要注意的事项
- Android IPC进程间通讯机制
- Android Manifest 用法
- [转载]Activity中ConfigChanges属性的用法
- Android之获取手机上的图片和视频缩略图thumbnails
- Android之使用Http协议实现文件上传功能
- Android学习笔记(二九):嵌入浏览器
- android string.xml文件中的整型和string型代替
- i-jetty环境搭配与编译
- android之定时器AlarmManager
- android wifi 无线调试
- Android Native 绘图方法
- Android java 与 javascript互访(相互调用)的方法例子
- android 代码实现控件之间的间距
- android FragmentPagerAdapter的“标准”配置
- Android"解决"onTouch和onClick的冲突问题
- android:installLocation简析
- android searchView的关闭事件
- SourceProvider.getJniDirectories