安卓内存信息查看

目录

  • 前言
  • 一、Android查看内存相关信息的方法
    • 1.1 通过 adb shell 获取内存信息
    • 1.2 通过编程方式获取内存信息
    • 1.3 adb shell 获取应用程序内存使用情况
    • 1.4 free指令
  • 二、总结


前言

一、Android查看内存相关信息的方法

1.1 通过 adb shell 获取内存信息

C:\Users\henry.xue>adb shell
trinket:/ # cat proc/meminfo
MemTotal:        3711580 kB
MemFree:          607128 kB
MemAvailable:    2371444 kB
Buffers:           10980 kB
Cached:          1697644 kB
SwapCached:            0 kB
Active:          1107552 kB
Inactive:        1345780 kB
Active(anon):     745760 kB
Inactive(anon):     4916 kB
Active(file):     361792 kB
Inactive(file):  1340864 kB
Unevictable:           0 kB
Mlocked:               0 kB
SwapTotal:       2097148 kB
SwapFree:        2097148 kB
Dirty:              2320 kB
Writeback:             0 kB
AnonPages:        744756 kB
Mapped:           666316 kB
Shmem:              5960 kB
Slab:             231564 kB
SReclaimable:      70964 kB
SUnreclaim:       160600 kB
KernelStack:       35616 kB
PageTables:        52180 kB
NFS_Unstable:          0 kB
Bounce:                0 kB
WritebackTmp:          0 kB
CommitLimit:     3952936 kB
Committed_AS:   90872212 kB
VmallocTotal:   263061440 kB
VmallocUsed:       75784 kB
VmallocChunk:          0 kB
CmaTotal:         208896 kB
CmaFree:               0 kB

参数详解:

  • MemTotal:总内存大小,单位为 kB。
  • MemFree:空闲内存大小,单位为 kB。表示当前未被使用的内存大小。
  • MemAvailable:可用内存大小,单位为 kB。表示系统当前可用于分配给进程的内存大小,包括空闲内存和缓存内存。
  • Buffers:缓冲区大小,单位为 kB。用于存放文件系统的缓冲区大小。
  • Cached:缓存大小,单位为 kB。用于存放文件系统的缓存大小。
  • SwapCached:交换缓存大小,单位为 kB。表示被交换到磁盘的内存页在内存中的缓存大小。
  • Active:活跃内存大小,单位为 kB。表示当前正在使用的内存大小。
  • Inactive:非活跃内存大小,单位为 kB。表示当前未被使用但仍然在内存中的内存大小。
  • Active(anon):活跃的匿名内存大小,单位为 kB。表示当前正在使用的匿名内存大小。
  • Inactive(anon):非活跃的匿名内存大小,单位为 kB。表示未被使用的匿名内存大小。
  • Active(file):活跃的文件内存大小,单位为 kB。表示当前正在使用的文件内存大小。
  • Inactive(file):非活跃的文件内存大小,单位为 kB。表示未被使用的文件内存大小。
  • 其余参数包括 Dirty、Writeback、AnonPages、Mapped、Shmem、Slab、KernelStack、PageTables 等,分别表示不同类型的内存使用情况和内核数据结构占用的内存大小。
  • SwapTotal:交换空间总大小,单位为 kB。表示系统中交换空间的总大小。
  • SwapFree:可用交换空间大小,单位为 kB。表示系统中可用于交换的空间大小。
  • CommitLimit:提交限制大小,单位为 kB。表示系统能够保证不会耗尽内存和交换空间的总可用空间大小。
  • Committed_AS:已提交内存大小,单位为 kB。表示系统当前已分配但尚未使用的内存大小。
  • VmallocTotal:虚拟内存总大小,单位为 kB。表示系统中虚拟内存的总大小。
  • VmallocUsed:已使用的虚拟内存大小,单位为 kB。表示系统中已被使用的虚拟内存大小。
  • VmallocChunk:虚拟内存块大小,单位为 kB。表示系统中虚拟内存的块大小。
  • CmaTotal:连续内存分配总大小,单位为 kB。表示系统中用于连续内存分配的总大小。
  • CmaFree:可用连续内存分配大小,单位为 kB。表示系统中可用于连续内存分配的大小。

1.2 通过编程方式获取内存信息

ActivityManager里的内部类MemoryInfo

    public static class MemoryInfo implements Parcelable {/*** The available memory on the system.  This number should not* be considered absolute: due to the nature of the kernel, a significant* portion of this memory is actually in use and needed for the overall* system to run well.*/public long availMem;/*** The total memory accessible by the kernel.  This is basically the* RAM size of the device, not including below-kernel fixed allocations* like DMA buffers, RAM for the baseband CPU, etc.*/public long totalMem;/*** The threshold of {@link #availMem} at which we consider memory to be* low and start killing background services and other non-extraneous* processes.*/public long threshold;/*** Set to true if the system considers itself to currently be in a low* memory situation.*/public boolean lowMemory;......

其中重要的四个参数:

  • availMem: 系统上的可用内存。这个数字不应该被认为是绝对的:由于内核的性质,这个内存的很大一部分实际上正在使用,并且是整个系统正常运行所必需的。
  • totalMem: 内核可访问的总内存。这基本上是设备的 RAM 大小,不包括内核下面的固定分配,如 DMA 缓冲区、基带 CPU 的 RAM 等。
  • threshold: availMem 的阈值,在这个阈值以下,系统会认为内存较低,并开始终止后台服务和其他非必要进程。
  • lowMemory: 如果系统认为当前处于低内存情况,则设置为 true。
ActivityManager activityManager = (ActivityManager) getSystemService(Context.ACTIVITY_SERVICE);
ActivityManager.MemoryInfo memoryInfo = new ActivityManager.MemoryInfo();
activityManager.getMemoryInfo(memoryInfo);
long totalMemory = memoryInfo.totalMem;
long availableMemory = memoryInfo.availMem;

这段代码将获取设备的总内存和可用内存信息。

1.3 adb shell 获取应用程序内存使用情况

  • 使用以下命令可以查看应用程序的内存使用情况:

adb shell dumpsys meminfo <package_name>

  • 将 <package_name> 替换为您要查看的应用程序包名,这将返回该应用程序的内存使用情况,包括堆内存、Native 内存等。

示例:

trinket:/ # dumpsys meminfo com.android.systemui
Applications Memory Usage (in Kilobytes):
Uptime: 85930415 Realtime: 85930415** MEMINFO in pid 2027 [com.android.systemui] **Pss  Private  Private     Swap     Heap     Heap     HeapTotal    Dirty    Clean    Dirty     Size    Alloc     Free------   ------   ------   ------   ------   ------   ------Native Heap    27358    27308        0        0    33420    29399     4020Dalvik Heap     6052     6008        0        0    11031     5516     5515Dalvik Other     2273     2268        0        0Stack       40       40        0        0Ashmem       96       92        0        0Gfx dev     4332     4332        0        0Other dev       44        0       40        0.so mmap     2982       88       76        0.jar mmap     2108        0      192        0.apk mmap    14337        0    11888        0.ttf mmap      196        0       52        0.dex mmap      173        4      168        0.oat mmap      952        0        0        0.art mmap     1583     1280        0        0Other mmap     1645      476      108        0EGL mtrack     3024     3024        0        0GL mtrack     2964     2964        0        0Unknown     1548     1544        0        0TOTAL    71707    49428    12524        0    44451    34915     9535App SummaryPss(KB)------Java Heap:     7288Native Heap:    27308Code:    12468Stack:       40Graphics:    10320Private Other:     4528System:     9755TOTAL:    71707      TOTAL SWAP (KB):        0ObjectsViews:      840         ViewRootImpl:        6AppContexts:       16           Activities:        0Assets:       14        AssetManagers:        0Local Binders:      171        Proxy Binders:       67Parcel memory:       22         Parcel count:       75Death Recipients:        4      OpenSSL Sockets:        0WebViews:        0SQLMEMORY_USED:        0PAGECACHE_OVERFLOW:        0          MALLOC_SIZE:        0
trinket:/ #
  • Pss:Proportional Set Size,进程使用的物理内存大小,按比例分配共享库的内存。
  • Private Dirty:进程使用的私有脏数据内存大小,表示进程独占的脏数据内存。
  • Private Clean:进程使用的私有干净数据内存大小,表示进程独占的干净数据内存。
  • Swap:被交换到磁盘的内存大小。
  • Heap Size:堆内存总大小。
  • Heap Alloc:已分配的堆内存大小。
  • Heap Free:堆内存空闲大小。

在输出中,各个部分的含义如下:

  • Native Heap:本地堆内存使用情况。
  • Dalvik Heap:Dalvik 虚拟机堆内存使用情况。
  • Dalvik Other:Dalvik 虚拟机其他内存使用情况。
  • Stack:栈内存使用情况。
  • Ashmem:共享内存使用情况。
  • Gfx dev:图形设备内存使用情况。
  • Other dev:其他设备内存使用情况。
  • .so mmap:共享库内存映射使用情况。
  • .jar mmap:Java 存档内存映射使用情况。
  • .apk mmap:Android 应用程序包内存映射使用情况。
  • .ttf mmap:TrueType 字体内存映射使用情况。
  • .dex mmap:Dalvik 可执行文件内存映射使用情况。
  • .oat mmap:ART 可执行文件内存映射使用情况。
  • .art mmap:ART 内存映射使用情况。
  • Other mmap:其他内存映射使用情况。
  • EGL mtrack:EGL 内存使用情况。
  • GL mtrack:图形库内存使用情况。
  • Unknown:未知内存使用情况。

App Summary

  • Java Heap:Java 堆内存的使用情况,占用了 7288KB 的内存。
  • Native Heap:本地堆内存的使用情况,占用了 27308KB 的内存。
  • Code:代码段的内存使用情况,占用了 12468KB 的内存。
  • Stack:堆栈的内存使用情况,占用了 40KB 的内存。
  • Graphics:图形相关的内存使用情况,占用了 10320KB 的内存。
  • Private Other:其他私有内存的使用情况,占用了 4528KB 的内存。
  • System:系统内存的使用情况,占用了 9755KB 的内存。
    在总结部分:
  • TOTAL:所有上述部分的内存使用情况总和为 71707KB。
  • TOTAL SWAP:交换空间(Swap)的使用情况为 0KB,表示当前没有使用交换空间。

Objects

Objects:这部分提供了应用程序中对象的相关统计信息。

  • Views:视图对象的数量。
  • ViewRootImpl:视图根对象的数量。
  • AppContexts:应用程序上下文的数量。
  • Activities:活动(Activity)对象的数量。
  • Assets:资源对象的数量。
  • AssetManagers:资源管理器对象的数量。
  • Local Binders:本地 Binder 对象的数量。
  • Proxy Binders:代理 Binder 对象的数量。
  • Parcel memory:Parcel 内存使用情况。
  • Parcel count:Parcel 对象的数量。
  • Death Recipients:死亡接收者对象的数量。
  • OpenSSL Sockets:OpenSSL 套接字对象的数量。
  • WebViews:Web 视图对象的数量。

SQL

  • SQL:这部分提供了与 SQL 数据库相关的内存使用情况。
  • MEMORY_USED:数据库内存使用情况。
  • PAGECACHE_OVERFLOW:页面缓存溢出情况。
  • MALLOC_SIZE:分配大小。

1.4 free指令

free -m

xxxxxxx:/ # free -mtotal        used        free      shared     buffers
Mem:             3624        3319         304           7          17
-/+ buffers/cache:           3302         322
Swap:            2047           0        2047
trinket:/ #

内存(Memory)部分:
total:系统总内存为3624 MB。
used:已使用的内存为3319 MB。
free:空闲内存为304 MB。
shared:共享内存为7 MB。
buffers:缓冲区占用了17 MB。
缓存/缓冲区(Buffers/Cache)部分:
-/+ buffers/cache:这一行显示了实际使用的内存情况,去除了缓冲区占用的内存。
used:实际使用的内存为3302 MB。
free:实际空闲内存为322 MB。
交换空间(Swap)部分:
total:交换空间总大小为2047 MB。
used:已使用的交换空间大小为0 MB。
free:剩余可用的交换空间大小为2047 MB。

free 后面还可以跟其他参数:

-b:以字节为单位显示内存使用情况。
-k:以 KB(千字节)为单位显示内存使用情况。
-m:以 MB(兆字节)为单位显示内存使用情况。
-g:以 GB(千兆字节)为单位显示内存使用情况。
-t:在输出的最后一行显示总内存使用情况的总和。
-h:以人类可读的格式(例如,将字节转换为 KB、MB、GB)显示内存使用情况。

使用watch 命令来定期执行 free 命令并显示系统内存使用情况

watch -n 1 free -m

这个命令将每隔 1 秒执行一次 free -m 命令,并在终端中显示当前的内存使用情况(以 MB 为单位)。可以根据需要更改 -n 参数的值来调整更新频率。


二、总结

  • adb shell cat proc/meminfo
  • ActivityManager.MemoryInfo
  • adb shell dumpsys meminfo < package_name>
  • adb shell free -m

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/719971.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

JMeter正则表达式提取器和JSON提取器基础用法,小白必会!

【面试突击班】1. 性能测试主要关注哪些指标&#xff1f; 最近在利用JMeter做接口自动化测试&#xff0c;正则表达式提取器和JSON提取器用的还挺多&#xff0c;想着分享下&#xff0c;希望对大家的接口自动化测试项目有所启发。 在 JMeter 中&#xff0c;正则表达式和 JSON 提…

代码随想录算法训练营第二十六天 | 39. 组合总和 40.组合总和II 131.分割回文串

39. 组合总和 https://programmercarl.com/0039.%E7%BB%84%E5%90%88%E6%80%BB%E5%92%8C.html class Solution:def combinationSum(self, candidates: List[int], target: int) -> List[List[int]]:result []self.backtracking(candidates, target,0, [], result,0)return…

探索Ubuntu命令行:常见问题与解决方案

一、引言 Ubuntu&#xff0c;作为一款流行的Linux发行版&#xff0c;其命令行界面&#xff08;CLI&#xff09;为用户提供了丰富的功能和灵活性。然而&#xff0c;对于新手来说&#xff0c;命令行可能会带来一些挑战。本文将探讨一些在使用Ubuntu命令行时可能遇到的问题及其解决…

C语言内存优化实用指南

一、引言 在C语言编程中&#xff0c;内存管理是一项至关重要的任务。有效的内存优化可以提升程序的性能&#xff0c;减少资源消耗&#xff0c;并防止可能出现的内存泄漏和溢出问题。以下是一些关于C语言内存优化的实用指南。 二、理解内存管理 在C语言中&#xff0c;程序员需…

VMware虚拟机安装Linux

1.新建虚拟机 2. 安装操作系统 等待 选择中文 点软件选择 选择下面的GNOME桌面 禁用KDUMP 点进安装位置&#xff0c;点完成就可以了 网络连接&#xff0c;右上角打开 开始安装&#xff0c;输入ROOT密码&#xff0c;创建用户 点击重启&#xff0c;等待 重启完成之后出现下面的界…

分巧克力.

题目描述 儿童节那天有K位小朋友到小明家做客。小明拿出了珍藏的巧克力招待小朋友们。 小明一共有块巧克力&#xff0c;其中第块是Hw的方格组成的长方形。为了公平起见 小明需要从这N块巧克力中切出K块巧克力分给小朋友们。切出的巧克力需要满足: 1.形状是正方形&#xff0c;边…

Windows10蓝牙开关按钮不见了问题??

Windows10蓝牙开关按钮不见了问题&#xff1f;&#xff1f;此类问题一般是系统更新不及时的bug&#xff0c;遗漏掉了蓝牙相关驱动插件 试过很多方法&#xff0c;直接下载一个驱动人生即可&#xff0c;主要通过官网下载 下载这个就行 打开软件自动扫描就可以了 最后查看结果

python二级常见题目

一.常见语法 jieba—第三方中文分词函数库 jieba—第三方中文分词函数库_jieba库函数-CSDN博客 Python基础——format格式化 Python基础——format格式化_python format-CSDN博客 format()方法的使用超全_format方法-CSDN博客 Python中random函数用法整理 Python中random…

C#面:什么是虚方法?它与接口有什么不同?

虚方法&#xff1a; 虚方法是在基类中声明的方法&#xff0c;可以在派生类中进行重写。通过使用关键字"virtual"来标记虚方法。派生类可以根据需要重新实现该方法。 虚方法和接口的主要区别在于&#xff1a; 虚方法是在基类中定义的&#xff0c;派生类可以选择性地…

web安全学习笔记【19】——信息打点(9)

信息打点-红蓝队自动化项目&资产侦察&武器库部署&企查产权&网络空间[1] #知识点&#xff1a; 1、业务资产-应用类型分类 2、Web单域名获取-接口查询 3、Web子域名获取-解析枚举 4、Web架构资产-平台指纹识别 ------------------------------------ 1、开源-CM…

【Web】关于FastJson反序列化开始前的那些前置知识

目录 FastJson介绍 FJ序列化与反序列化方法 关于反序列化三种方式的关系与区别 FastJson反序列化漏洞原理通识 关于getter&setter FastJson介绍 FastJson&#xff08;快速JSON&#xff09;是一个Java语言编写的高性能、功能丰富且易于使用的JSON解析和序列化库。它由…

python梅花易数,python算卦

2024-02-28 python梅花易数&#xff0c;python算卦&#xff0c;梅花易数的三数起卦 前言&#xff1a;本来想搜来直接复制的&#xff0c;结果看目前找到的都有些问题&#xff0c;特意去看了梅花易数的视频&#xff0c;写了个。想法被拿捏的死死的&#xff0c;不如相信算卦 # …

在docker中玩flink时候记录一些组合命令

前言 玩docker的时候记录一些组合命令&#xff0c;一方面是可以直接拿上来使用&#xff0c;还有的话也可以拿过来改改&#xff0c;主要是我自己有这种经历&#xff0c;过一阵子我自己也忘&#xff0c;与其去搜人家的博客还不如自己记录一把。好了&#xff0c;没啥所谓的规律性…

第8章:Nginx与Web应用《Nginx实战:从入门到精通》

Nginx不仅仅是一个高效的静态内容服务器和反向代理服务器&#xff0c;它还能与各种流行的Web应用框架和语言环境无缝集成&#xff0c;从而提供强大的动态内容处理能力。在本章中&#xff0c;我们将深入探讨Nginx如何与PHP、Python、Ruby和Node.js等常见的Web应用和语言环境协同…

【AI视野·今日CV 计算机视觉论文速览 第300期】Fri, 1 Mar 2024

AI视野今日CS.CV 计算机视觉论文速览 Fri, 1 Mar 2024 Totally 114 papers &#x1f449;上期速览✈更多精彩请移步主页 Daily Computer Vision Papers DistriFusion: Distributed Parallel Inference for High-Resolution Diffusion Models Authors Muyang Li, Tianle Cai, J…

考研复试指南

1. 记住&#xff0c;复试的本质不是考试&#xff0c;而是一场自我展示。 考研复试并非简单的知识考察&#xff0c;更是一场展示自我能力和潜力的机会。除了学科知识&#xff0c;考官更关注你的综合素质、学术兴趣和未来发展规划。因此&#xff0c;要保持自信&#xff0c;用更全…

理疗美容按摩小程序有哪些功能

医疗、美容和按摩等行业是一个快速发展的领域&#xff0c;很多美容院和理疗中心都希望通过小程序来提升服务质量和用户体验。下面我们来看看一个理疗美容小程序可以具备哪些功能&#xff0c;并介绍如何使用这些功能。 1. **在线预约服务**&#xff1a;用户可以通过小程序预约理…

上个epoll服务端程序的一点点优化

两点优化&#xff1a; &#xff08;1&#xff09;SOCK_NONBLOCK设置非阻塞代替非阻塞函数。 &#xff08;2&#xff09;将监听listenfd 的判断放在了else if(evs[ii].events & (EPOLLIN | EPOLLPRI))下面&#xff0c;因为listenfd的事件一定是读事件。 // 演示采用epoll模…

docker commit构建镜像时环境变量不生效问题解决

描述 当使用 docker commit 命令提交容器镜像时&#xff0c;环境变量的配置并不会自动生效。 原因 这是因为 docker commit 命令只是将容器的当前状态保存为一个新的镜像&#xff0c;并不会修改容器的运行时配置。 甚至在容器修改profile配置文件后进行docker commit都不会…

详解自动化测试框架特点和原理

【软件测试面试突击班】2024吃透软件测试面试最全八股文攻略教程&#xff0c;一周学完让你面试通过率提高90%&#xff01;&#xff08;自动化测试&#xff09; 今天捡一些比较典型的工具型自动化框架来介绍&#xff0c;主要围绕历史、特点和原理来讲解&#xff0c;至于使用教程…