• android内存耗用:VSS/RSS/PSS/USS


    VSS- Virtual Set Size 虚拟耗用内存(包含共享库占用的内存)

             不是真实当前应用进程所占用的内存。

        

    内存分配的原理

    从操作系统角度来看,进程分配内存有两种方式,分别由两个系统调用完成:brk和mmap(不考虑共享内存)。

    1、brk是将数据段(.data)的最高地址指针_edata往高地址推;

    2、mmap是在进程的虚拟地址空间中(堆和栈中间,称为文件映射区域的地方)找一块空闲的虚拟内存

         这两种方式分配的都是虚拟内存,没有分配物理内存在第一次访问已分配的虚拟地址空间的时候,

    发生缺页中断,操作系统负责分配物理内存,然后建立虚拟内存和物理内存之间的映射关系。

    在标准C库中,提供了malloc/free函数分配释放内存,这两个函数底层是由brk,mmap,munmap这些系统调用实现的。

    情况一、malloc小于128k的内存,使用brk分配内存,将_edata往高地址推(只分配虚拟空间,不对应物理内存(因此没有初始化),

    第一次读/写数据时,引起内核缺页中断,内核才分配对应的物理内存,然后虚拟地址空间建立映射关系)

    情况二、malloc大于128k的内存,使用mmap分配内存,在堆和栈之间找一块空闲内存分配(对应独立内存,而且初始化为0)

    RSS- Resident Set Size 实际使用物理内存(包含共享库占用的内存)

    这个包含共享库所占用的物理内存,即使这个共享库被多个进程使用

    PSS- Proportional Size 实际使用的物理内存(比例分配共享库占用的内存)

    按比例包含共享库所占用的内存,比如有9k的共享库被3个进程使用,那个当前进程所占

    用的大小被计算为9/3k,也就是3k

    USS- Unique Set Size 进程独自占用的物理内存(不包含共享库占用的内存)

    当前进程,当前所有在用的物理内存

    top  | grep app名称

    ps  |  grep app名称

    procrank | grep app名称

    一般的android没有此命令,需要去下载一个,或者下载源码,编译安装。

    dumpsys meminfo app名称

    前两个命令只能查到VSS RSS内存占用信息

    而后面两个命令可以查出  PSS USS内存占用.

    dumpsys meminfo 可以查出native和dalvik分别占用多少内存

    dumpsys 用来给出手机中所有应用程序的信息,并且也会给出现在手机的状态。

    dumpsys [Option]

                   meminfo 显示内存信息

                   cpuinfo 显示CPU信息

                   account 显示accounts信息

                   activity 显示所有的activities的信息

                   window 显示键盘,窗口和它们的关系

                   wifi 显示wifi信息

    android 自带的DDMS进行APP内存使用分析

    Heap analzy

    allocation analzy

    Heap PROF FILE

    通过MAT分析配置文件

    MAT install site

    http://download.eclipse.org/mat/1.2/update-site/

    还可以通过trace view进行性能分析。。。

  • 相关阅读:
    iOS6和iOS7代码的适配(5)——popOver
    es5创建对象与继承
    js学习日记-new Object和Object.create到底干了啥
    js滚动及可视区域的相关的操作
    css匹配规则及性能
    normalize.css源码分析
    css的水平居中和垂直居中总结
    js快速排序算法
    数据结构flash演示
    二叉树遍历
  • 原文地址:https://www.cnblogs.com/lzl-sml/p/3970020.html
Copyright © 2020-2023  润新知