Android 分析应用程序占用native内存

 

Android 分析应用程序占用native内存

分类: Android   2392人阅读  评论(1)  收藏  举报

      Android 应用开发大家都知道可以通过DDMS来查看应用程序进程占用的内存大小;然而Native 内存并不能在虚拟堆上看到;Android系统基于Linux,这样的话其具备Linux的大多数特性;在Linux当中有不少方法可以查看进程占用的内存,可以采用图形界面工具,也可以采用命令,具体如何查看这边就不介绍了。

     Android Native 内存查看:

1.首先需要确保你的PC上装了adb工具;不同平台安装相应的版本。

2.adb shell 然后通过ps 命令查看手机上的进程。

  

[html]  view plain copy
  1. u0_a101   18271 174   656392 32856 ffffffff 00000000 S com.baidu.map.location  
  2. u0_a101   18286 174   654332 34288 ffffffff 00000000 S com.baidu.map.location:re  
  3. mote  
  4. u0_a58    18325 174   673716 38868 ffffffff 00000000 S com.xiaomi.channel:pushse  
  5. rvice  
  6. u0_a58    18347 174   688288 43628 ffffffff 00000000 S com.xiaomi.channel  
  7. root      18380 2     0      0     ffffffff 00000000 S kworker/0:3  
  8. u0_a11    18440 174   686980 41256 ffffffff 00000000 S com.google.process.gapps  
  9. u0_a11    18470 174   674016 36508 ffffffff 00000000 S com.google.android.gms  
  10. u0_a11    18497 174   676944 38440 ffffffff 00000000 S com.google.android.gsf.lo  
  11. gin  
  12. u0_a11    18517 174   684580 41268 ffffffff 00000000 S com.google.process.locati  
  13. on  
  14. u0_a12    18588 174   654444 32760 ffffffff 00000000 S com.miui.cloudservice  
  15. u0_a74    18623 174   838968 123264 ffffffff 00000000 R com.android.chrome  
  16. u0_i134   18654 174   747068 56468 ffffffff 00000000 S com.android.chrome:sandbo  
  17. xed_process0  
  18. u0_a23    18767 174   654368 32372 ffffffff 00000000 S com.google.android.partne  
  19. rsetup  
3.查看进程:下面以com.android.chrome为例

找到com.android.chrome 进程id是18623:在终端上输入:

[plain]  view plain copy
  1. shell@android:/ $ cat /proc/18623/status  

[plain]  view plain copy
  1. cat /proc/18623/status  
  2. Name:   .android.chrome  
  3. State:  S (sleeping)  
  4. Tgid:   18623  
  5. Pid:    18623  
  6. PPid:   174  
  7. TracerPid:      0  
  8. Uid:    10074   10074   10074   1007  
  9. Gid:    10074   10074   10074   1007  
  10. FDSize: 256  
  11. Groups: 1006 1015 1028 3003  
  12. VmPeak:   842864 kB  
  13. VmSize:   811216 kB  
  14. VmLck:         0 kB  
  15. VmPin:         0 kB  
  16. VmHWM:    126080 kB  
  17. <strong>VmRSS:    125484 kB</strong>  
  18. VmData:    69156 kB  
  19. VmStk:       136 kB  
  20. VmExe:         8 kB  
  21. VmLib:     68128 kB  
  22. VmPTE:       298 kB  
  23. VmSwap:        0 kB  
  24. Threads:        46  
  25. SigQ:   0/14952  
  26. SigPnd: 0000000000000000  
  27. ShdPnd: 0000000000000000  
  28. SigBlk: 0000000000001204  
  29. SigIgn: 0000000000000000  
  30. SigCgt: 00000002000094e8  
  31. CapInh: 0000000000000000  
  32. CapPrm: 0000000000000000  
  33. CapEff: 0000000000000000  
  34. CapBnd: ffffffffffffffff  
  35. Cpus_allowed:   f  
  36. Cpus_allowed_list:      0-3  
  37. voluntary_ctxt_switches:        2759  
  38. nonvoluntary_ctxt_switches:     2591  

4.分析内存

  熟悉Linux的童鞋知道proc目录下存放的是进程的各种信息;

  第三步中看到的VmRSS就是进程当前占用的实际内存。

  具体其他参数可以参考:进程信息参数详解

   

[plain]  view plain copy
  1. <span style="font-size:18px">rss %ld     (24) Resident Set Size: number of pages the  
  2.                          process has in real memory.  This is just the  
  3.                          pages which count toward text, data, or stack  
  4.                          space.  This does not include pages which have not  
  5.                          been demand-loaded in, or which are swapped out.</span>  
5.ps会列出很多进程我们有时候需要直接找到对应的进程,linux大家都知道可以通过grep、或者find找到直接找到进程;

adb shell;trim版本的linux ,不直接支持这些命令;不过有个方法是通过busybox来解决;下面以查找chrome为例:

[plain]  view plain copy
  1. <span style="font-size:18px">shell@android:/ $ ps | busybox grep chrome  
  2. ps | busybox grep chrome  
  3. u0_a74    18623 174   837800 125568 ffffffff 00000000 S com.android.chrome  
  4. u0_i134   18654 174   752124 55908 ffffffff 00000000 S com.android.chrome:sandbo  
  5. xed_process0</span>  
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Android内存分析是指检测和分析Android应用程序中的内存使用情况,以便优化应用程序性能和解决内存泄漏问题。 首先,我们可以使用Android Studio提供的内存分析工具来对应用程序进行分析。该工具可以显示应用程序内存使用情况,并提供了堆转储文件的功能。通过查看堆转储文件,我们可以检查应用程序的堆内存使用情况,包括对象的分配、引用和释放情况。从而找到可能的内存泄漏问题,如未及时回收的对象或无效的引用。此外,我们可以利用工具中的多种图表和报告来分析内存泄漏的原因和位置。 其次,我们可以使用MAT(Memory Analyzer Tool)工具来对堆转储文件进行更深入的分析。MAT工具提供了更多的工具和报告,可以帮助我们找出内存泄漏的根本原因,如长生命周期的对象、静态引用、未正确关闭的资源等。此外,MAT还可以分析内存中的对象实例占用及其关系,帮助我们了解对象之间的引用关系并发现潜在的内存泄漏。 最后,我们还可以使用一些第三方库和工具来辅助进行内存分析,如LeakCanary和Facebook的Stetho。LeakCanary可以实时监测内存泄漏,并在检测到泄漏时提供详细的报告和堆转储文件。Stetho可以实时查看应用程序内存使用情况,并提供调试界面和API,方便开发人员进行内存分析和调试。 总之,Android native内存分析是通过使用内置工具、第三方库和工具来检测和分析应用程序内存使用情况,以优化性能和解决内存泄漏问题。通过分析堆转储文件和使用各种工具和报告,开发人员可以快速定位和解决内存问题,提升应用程序的质量和性能。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值