如何查看应用是否存在内存泄漏
2023-10-21 14:02:45发布 浏览532次 信息编号:79717
友情提醒:凡是以各种理由向你收取费用,均有骗子嫌疑,请提高警惕,不要轻易支付。
如何查看应用是否存在内存泄漏
查看内存信息:
一般来说,内存的使用有以下规律:
VSS >= RSS >= PSS >= USS
VSS - Set Size 虚拟消耗内存(包括共享库占用的内存)是单个进程可访问的地址空间
RSS - Set Size 实际使用的物理内存(包括共享库占用的内存)是单个进程实际占用的内存大小。 对于单个共享库来说,尽管无论有多少个进程使用它,共享库实际上只会被加载到内存中一次。
PSS - Set Size 实际使用的物理内存(按比例分配共享库占用的内存)
USS - 设置大小 进程单独占用的物理内存(不包括共享库占用的内存) USS 是一个非常非常有用的数字,因为它揭示了运行特定进程的内存的真实增量大小。 如果进程终止,USS 是实际返回给系统的内存量。
USS是检测进程何时开始泄漏可疑内存的最佳数字。如果您怀疑程序存在内存泄漏,可以检查该值是否不断增加。
VSS和RSS在检查进程本身的内存状态方面用处不大,因为它们包含了共享库的内存使用情况,而共享库往往会占用很大比例的资源,这就淡化了自身造成的内存波动。
我们一般观察Uss来反映进程的内存使用情况。 Uss的大小代表仅此进程使用的内存大小。 进程被杀死后,这块内存将被完全回收。
USS 是一个非常有用的数字,因为它揭示了运行特定进程的内存的真实增量大小。 如果进程终止,USS 是实际返回给系统的内存量。 USS 是检测进程何时开始泄漏可疑内存的最佳数字。
如果怀疑程序存在内存泄漏,可以检查USS值是否不断增加。
要测试单个APP,请使用以下命令:adb shell com.sohu。
截图如下:
其中heap指c/c++申请的内存空间,heap指java申请的内存空间,heap alloc指已分配的空间,heap free指剩余空间,heap size指最大分配的空间、堆大小=堆分配+堆空闲;
以下是总和的详细信息:
JVM管理的内存一般可以分为两部分:Heap和。 前者是我们所熟悉的,用于Java应用程序; 后者也称为C-Heap,由JVM自己的进程使用。 Heap及其内部组件的大小可以通过JVM的一系列命令行参数来控制,这里不再赘述。 没有相应的参数来控制大小。 大小取决于操作系统进程的最大值(对于32位系统为3~4G,各个系统的实现不同),以及生成的Java字节码和创建的线程的大小。 数量、Java 对象维护的状态信息的大小(对于 GC)以及某些第三方包(例如 JDBC 驱动程序)使用的内存。
保存了什么?
管理java堆的状态数据(用于GC);
JNI调用,也就是Stack;
编译时使用JIT(甚至编译器),JIT的输入(Java字节码)和输出(可执行代码)也保存在;
蔚来。 对于IBM JVM和IBM,可以通过-XX:设置nio 的最大值。 默认为 64M。 当超过这个时,会自动按照32M增加。
对于IBM的JVM实现的某些版本,类加载器和类信息保存在.
其他类型说明
内存消耗
匿名共享内存,用于提供共享内存
其他Dev内部占用内存
.so mmap c库代码占用的内存
.jar mmap java文件代码占用的内存
.apk mmap apk代码占用的内存
.ttf mmap ttf文件代码占用内存
.dex mmap dex文件代码占用的内存
其他文件占用的其他 mmap 内存
我一直用总数据作为参考,但是测出的数据不被APP开发认可,说太大了。 他们使用堆大小数据,然后我不知道用什么数据来衡量内存。 目前有两种方法。
查看CPU信息:
单一应用程序:adb shell | com.搜狐。
整体电话:adb shell | 全部的
adb shell 顶部:
adb shell top方法还可以测试内存和CPU。
最高使用率
>adb shell 顶部 -h
用法:top [ -m ] [ -n ] [ -d 延迟 ] [ -s ] [ -t ] [ -h ]
-m 到 的数量。 显示的最大进程数
-n 要显示的数字。 刷新次数
-d 等待编号。 刷新间隔(默认5秒)
-s col 排序依据(cpu、vss、rss、thr)。 按哪一列排序
-t 显示 . 显示线程信息而不是进程信息
-h 这个帮助。 显示帮助文档
正常使用adb shell top时,会不断刷新。 单个情况可以根据top使用情况进行设置,如:adb shell top -m 10 -s cpu -n 1
第一组数据的含义:
User 是用户模式下的运行时间,不包括优先级值为负的进程。
具有负优先级值的进程占用的 CPU 时间很好
系统核心态运行时间
除 IO 等待时间外的空闲等待时间
IOW IO等待时间
IRQ硬中断时间
SIRQ软中断时间
第二组数据的含义:
PID进程号
公关优先
CPU% 当前瞬时CPU使用率
S进程状态:D=不间断睡眠状态,R=运行,S=睡眠,T=跟踪/停止,Z=僵尸进程
#THR 程序当前使用的线程数
VSS Set Size 虚拟消耗内存(包括共享库占用的内存)
RSS Set Size 实际使用的物理内存(包括共享库占用的内存)
PCY调度策略优先级,/
UID 进程所有者的用户ID
名称 进程的名称
不过细心的同学会发现,两种方法测试CPU的结果并不一致,存在很多差异。 是什么原因?
参考:
提醒:请联系我时一定说明是从星空网上看到的!