zoukankan      html  css  js  c++  java
  • 性能功耗

    性能功耗 启动(冷启动进程,home和back各启动的activity),内存,功耗

    GC
    一,GC的原因,一共有四种类型
    GC_CONCURRENT 当你的堆内存快被用完的时候,就会触发这个GC回收
    GC_FOR_MALLOC 堆内存已经满了,同时又要试图分配新的内存,所以系统要回收内存
    GC_EXTERNAL_ALLOC 在Android3.0 (Honeycomb)以前,释放通过外部内存(比如在2.3以前,产生的Bitmap对象存储在Native Memory中)时产生。Android3.0和更高版本中不再有这种类型的内存分配了。
    GC_EXPLICIT 调用System.gc时产生,上图中就是点击Cause GC按钮手动触发垃圾回收器产生的log信息

    二,freed 1413K表示GC释放了1434K的内存

    三,20% free 9349K/11644K, 20%表示目前可分配内存占的比例,9349K表示当前活动对象所占内存,11644K表示Heap的大小

    四,paused 8ms + 3ms, total 71ms,则表示触发GC应用暂停的时间和GC总共消耗的时间

     

    adb shell dumpsys meminfo +packagename

        Pss  Private  Private  Swapped     Heap     Heap     Heap
                                 Total    Dirty    Clean    Dirty             Size      Alloc     Free
                               ------   ------   ------      ------       ------      ------    ------
      Dalvik Heap    43786    42916        0        0              77208    73931     3277

     其中size是需要的内存,而allocated是分配了的内存,对应的2列分别是native和dalvik,当总数也就是total这一列超过单个程序内存的最大限制时,OOM就很有可能会出现了。

     
    电量名词:
    1.Statistics since last charge查找待机、灭屏待机、灭屏待机(未睡眠)等时间
    2.kernel wake lock、 All partial wake locks核心、局部持锁,分析超过10分钟的锁
    3.Estimated power use (mAh)查看应用耗电量
    4.Alarm Stats唤醒次数查询。注意开数据的应用唤醒机制(多久/次)。
     
    名词解析:

    Total RAM为手机的总内存;
    Free RAM为剩余内存(其中cached pss为后台缓冲进程,当系统内存不足或缓冲进程数目达到系统限制最大数时会杀掉(部分)以释放内存。
    cached为高速缓冲存储器的内存,这部分内存已经分配好了,但是系统为了节约频繁申请内存开销,free时会把一部分内存cache起来,当用户再次申请内存时可能会直接从缓冲拿一块出来。
    free为未分配的物理内存);
    Used RAM为用户态使用总内存;
    Lost RAM为内核态使用内存,比如OpenGL纹理内存、GPU占用内存、图形显示ION buffer都包含在Lost RAM里。当Free RAM比较小时可以认为系统内存不足
    (有种情况不能确定就是:Lost RAM占用内存很大,Lost RAM可能是内核缓冲内存太多了导致Free RAM小,但是并不是内存足,因为当内存不足时kernel会释放缓存,可以通过echo 3 > /proc/sys/vm/drop_caches主动释放)

    adb shell cat /proc/meminfo
    MemTotal: LowTotal与HighTotal总和,系统总可用RAM大小(即物理内存减去一些预留位和内核的二进制代码)
    MmFree: LowFree与HighFree的总和,被系统留着未使用的内存
    Buffers: 用来给文件做缓冲大小
    Cached: 被高速缓冲存储器(cache memory)缓存的内存的大小(等于 diskcache minus SwapCache)
    SwapCached: 被高速缓冲存储器(cache memory)用的交换空间的大小已经被交换出来的内存,但仍然被存放在swapfile中。用来在需要的时候很快的被替换而不需要再次打开I/O端口
    Active: 在活跃使用中的缓冲或高速缓冲存储器页面文件的大小,除非非常必要否则不会被移作他用
    Inactive: 在不经常使用中的缓冲或高速缓冲存储器页面文件的大小,可能被用于其他途径
    HighTotal: 高内存,内核不能直接访问的这部分内存
    HighFree: 高内存剩余大小
    LowTotal: 底内存,内核能够直接访问的内存
    LowFree: 低内存剩余大小
    SwapTotal: 交换空间的总大小
    SwapFree: 未被使用交换空间的大小
    Dirty: 等待被写回到磁盘的内存大小。
    Writeback: 正在被写回到磁盘的内存大小。
    AnonPages:未映射页的内存大小
    Mapped: 设备和文件等映射的大小。
    Slab: 内核数据结构缓存的大小,可以减少申请和释放内存带来的消耗。
    SReclaimable:可收回Slab的大小
    SUnreclaim: 不可收回Slab的大小(SUnreclaim+SReclaimable=Slab)
    PageTables: 管理内存分页页面的索引表的大小。
    NFS_Unstable: 不稳定页表的大小
    VmallocTotal: 可以vmalloc虚拟内存大小
    VmallocUsed: 已经被使用的虚拟内存大小。

    adb shell procrank
    可以看出各个应用/进程内存占用情况,期中:
    VSS- Virtual Set Size 虚拟耗用内存(包含共享库占用的内存)
    RSS- Resident Set Size 实际使用物理内存(包含共享库占用的内存)
    PSS- Proportional Set Size 实际使用的物理内(USS大小 + 私有库大小 + 比例分配共享库大小,比例分配共享库占用的内存,比如3个进程共用一个占用30M共享库,那么这个库只有10M计算到进程PSS中)
    USS- Unique Set Size 进程独自占用的物理内存(不包含共享库占用的内存)
    一般来说内存占用大小有如下规律:VSS >= RSS >= PSS >= USS,主要看PSS,它基本能反映出应用实际占用内存大小,当内存不足主要要关注这个值比较大的进程。当然有时候问题比较复杂就是:各个进程的PSS都很小但是系统剩余内存不足,比如运行大型游戏,游戏可能申请了大量的纹理,纹理内存主要是在VSS。这个时候需要用下面方法进行查看详细分布情况。


     

  • 相关阅读:
    2020软件工程作业01
    2020软件工程—06—个人作业
    团队二次作业
    软件工程作业05
    软件工程作业00--问题清单
    软件工程作业04二期
    2020软件工程作业04
    oracle11安装过程中常出现的问题和解决办法
    2020软件工程作业03
    2020软件工程作业02
  • 原文地址:https://www.cnblogs.com/season-xie/p/5364858.html
Copyright © 2011-2022 走看看