zoukankan      html  css  js  c++  java
  • Monkey总结

        Monkey是一个快速检查内存泄露的好工具,可以初步发现较明显的内存泄露问题。

       什么是内存泄露?是指不在使用的对象持续占有内存,造成内存空间的浪费。

       检查内存泄露的基本操作步骤:

             1.运行Monkey或者固定自动化用例

                adb shell monkey -p cn.microinvestment.weitou --pct-touch 100 --ingore-crashes --throttle 1000 -s 100 -v -v 50

                      2.监控内存值,如果出现过大等递增异常则保存HPROF文件

                                查看应用内存的命令:adb shell dumpsys meminfo(进程名) 

                                以下为一个bat脚本,主要 是记录第一行的和最后一行总共的内存,一直循环查询:

                                set process=cn.microinvestment.weitou

                                @adb sehll dumpsys meminfo %process% | findstr "Pss"

                                 :m

                                 @adb sehll dumpsys meminfo %process% | findstr "TOTAL"

                                 @ping -n 5 127.1>nul

                                  @goto m

                                 运行后,如图:

                                 如果发现内存过大,则保存HPROF文件:

                                     adb shell am dumpheap <进程名> <保存路径>

                       3.但是生成的HPROF文件怎么查看呢?我们要用到一个工具MAT来查看,但是首先还要这个HPROF文件转换成MAT可读的文件,在Android SDK tool里面有个hprof-conv命令:

                                    hprof-conv<原HPROF文件路径><转换后的HPROF路径>

                       4.用MAT工具打开转换后的HPROF文件:

                                   MAT下载:http://www.eclipse.org/mat/

                                   安装好JDK,配置好环境后打开MAT工具,选择File-Open File...,,再选择刚转换后的文件。

                                      一般来说会选择第一个,Leak Suspects Report

                                         会看到report的概览:

               再下面是问题列表: 

                                                   我们可以通过SQL语句来查询对象有没有被释放掉,如果有多个相同的对象,则会存在内存泄露的问题。              

                                                        在SQL查询框里输入:select * frominstanceof android.app.Activity,然后点击右上角的黑色感叹号按钮。

                                                        如果出现多个相同的对象,则存在内存泄露。

  • 相关阅读:
    从零开始学VUE之组件化开发(组件数据的存放)
    从零开始学VUE之组件化开发(组件分离写法)
    从零开始学VUE之组件化开发(语法糖优化组件注册)
    进程与线程的一个简单解释
    Crontab爬虫定时执行
    接口分类复习
    最长公共子串
    最长公共子序列(力扣第1143题)
    Reduce端分组排序源码分析
    Job提交流程源码和切片源码详解
  • 原文地址:https://www.cnblogs.com/jinjiangongzuoshi/p/5203729.html
Copyright © 2011-2022 走看看