zoukankan      html  css  js  c++  java
  • 手游性能之内存分析

    今天在研究android应用的内存,纪录一下,以便后续查阅。

    注:文中图片地址来源于:http://myeyeofjava.iteye.com/blog/1837860,借用一下,兄弟,懒得自己画了

    android内存主要有四种形式:VSS 、RSS 、PSS 、 USS

    一般来说内存占用大小有如下规律:VSS >= RSS >= PSS >= USS

    VSS:Virtual Set Size,虚拟耗用内存。它是一个进程能访问的所有内存空间地址的大小。这个大小包含了
    一些没有驻留在RAM中的内存,就像mallocs已经被分配,但还没有写入。VSS很少用来测量程序的实际使
    用内存。


    RSS:Resident Set Size,实际使用物理内存。RSS是一个进程在RAM中实际持有的内存大小。RSS可能会
    产生误导,因为它包含了所有该进程使用的共享库所占用的内存,一个被加载到内存中的共享库可能有很
    多进程会使用它。RSS不是单个进程使用内存量的精确表示。


    PSS:Proportional Set Size,实际使用的物理内存,它与RSS不同,它会按比例分配共享库所占用的内存。
    例如,如果有三个进程共享一个占30页内存控件的共享库,每个进程在计算PSS的时候,只会计算10页。
    PSS是一个非常有用的数值,如果系统中所有的进程的PSS相加,所得和即为系统占用内存的总和。当一个
    进程被杀死后,它所占用的共享库内存将会被其他仍然使用该共享库的进程所分担。在这种方式下,PSS
    也会带来误导,因为当一个进程被杀后,PSS并不代表系统回收的内存大小。


    USS:Unique Set Size,进程独自占用的物理内存。这部分内存完全是该进程独享的。USS是一个非常有用
    的数值,因为它表明了运行一个特定进程所需的真正内存成本。当一个进程被杀死,USS就是所有系统回
    收的内存。USS是用来检查进程中是否有内存泄露的最好选择。

    screenshot          screenshot

    screenshot        screenshot

    由于手游在开发过程中可能会使用到共享库,所以个人觉得查看手游内存信息的时候使用pss作为内存指标比较合理。通过查看腾讯对外的测试平台(wetest)报告发现腾讯使用的内存指标也是PSS

    image

    最后付一个.bat脚本用于实时查看某一应用的实时pss内存指标

    set process=com.xxxx.xxxx.xxxx             #需要测试的进程名
    
    @adb shell dumpsys meminfo %process% | findstr "Pss"        
    
    :m
    
    @adb shell dumpsys meminfo %process% | findstr "TOTAL"  
    
    @ping -n 5 127.1>nul
    @goto m
  • 相关阅读:
    组合数计算--动态规划
    ListView 的position和id的区别
    android View 关于transient
    BlockingQueue深入分析
    栈的实现(JAVA)
    队列的实现(JAVA)
    《算法导论》读书笔记之第11章 散列表
    java 二叉搜索树
    桶排序
    排序算法的稳定性
  • 原文地址:https://www.cnblogs.com/JianXu/p/5685217.html
Copyright © 2011-2022 走看看