安卓内存信息查看
目录
- 前言
- 一、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
相关文章:

安卓内存信息查看
目录 前言一、Android查看内存相关信息的方法1.1 通过 adb shell 获取内存信息1.2 通过编程方式获取内存信息1.3 adb shell 获取应用程序内存使用情况1.4 free指令 二、总结 前言 一、Android查看内存相关信息的方法 1.1 通过 adb shell 获取内存信息 C:\Users\henry.xue>…...

Positional Encoding 位置编码
Positional Encoding 位置编码 flyfish Transformer模型没有使用循环神经网络,无法从序列中学习到位置信息,并且它是并行结构,不是按位置来处理序列的,所以为输入序列加入了位置编码,将每个词的位置加入到了词向量中…...

MySql、Navicat 软件安装 + Navicat简单操作(建数据库,表)
一、MySql、Navicat 软件安装 及正常使用 MySql下载+安装: 检查安装情况: 配置环境变量: 搞定了!!! 可以登陆试哈哈哈 连接navicat 开始创建数据库 二、 商品种类表 - commoditytype int …...

逆向案例五、爬取b站评论,表单MD5加密
1.便捷写爬虫网站: Convert curl commands to code 使用流程:又点击想要抓的包,复制URL(base)格式复制 在上面链接中粘贴即可 2.找到含有评论的包(即main?oid):观察表单发现两处参数在变化&…...

010-原型链
原型链 1、概念2、原理3、new 操作符原理4、应用 1、概念 原型链:javascript的继承机制,是指获取JavaScript对象的属性会顺着其_proto_的指向寻找,直至找到Object.prototype上。 2、原理 💡 Tips:构造函数 Fn&#…...

Electron-builder打包安装包——编译篇
突然有一天想打包个桌面程序,没有打包过,经过九牛二虎之力终于打包出来,在此感谢那些热于分享的前辈! 本篇只讲打包运行和出现的问题 一、准备工作:提前下载相关资源包,否则在国内环境下可能因为网络问题…...

Red Hat系统升级内核版本
查看当前内核版本 uneme -r yum list kernel升级内核 yum update -y kernel检查升级后的内核版本 uneme -r yum list kernel升级系统中已安装的软件包到最新版本(过程时间较长) 目前只升级了系统内核,系统相关的安装包还是老的࿰…...

Java集合set之HashSet、LinkedHashSet、TreeSet的区别?
Java的集合中主要由List,Set,Queue,Map构成,Set特点:存取无序,不可以存放重复的元素,不可以用下标对元素进行操作。 HashSet 作为Set容器的代表子类,HashSet经常被用到,…...

全方位碾压chatGPT4的全球最强模型Claude 3发布!速通指南在此!保姆级教学拿脚都能学会!
🎉🎉欢迎光临,终于等到你啦🎉🎉 🏅我是苏泽,一位对技术充满热情的探索者和分享者。🚀🚀 🌟持续更新的专栏《Spring 狂野之旅:从入门到入魔》 &a…...

upload-Labs靶场“11-15”关通关教程
君衍. 一、第十一关 %00截断GET上传1、源码分析2、%00截断GET上传 二、第十二关 %00截断POST上传1、源码分析2、%00截断POST上传 三、第十三关 文件头检测绕过1、源码分析2、文件头检测绕过 四、第十四关 图片检测绕过上传1、源码分析2、图片马绕过上传 五、第十五关 图片检测绕…...

linux-rpm命令
rpm命令管理程序包:安装、升级、卸载、查询和校验 1、忽略依赖关系安装/卸载包 安装:rpm -Uvh 软件包名 --nodeps 卸载:rpm -e 软件包名 --nodes!!!!慎用!!!…...

如何利用python实现自己的modbus-tcp库
如果你想使用纯Socket编程来实现Modbus TCP通讯,而不是依赖于Modbus库,你需要理解Modbus TCP协议的细节,并能够手动构建和解析Modbus消息。以下是一个简单的示例,展示了如何使用Python的socket库来实现Modbus TCP通讯: 了解Modbus TCP协议: Modbus TCP协议使用TCP作为底层…...

linux系统-----------搭建LNMP 架构
PHP(Hypertext Preprocessor 超文本预处理器)是通用服务器端脚本编程语言,主要用于web开发实现动态web页面,也是最早实现将脚本嵌入HTML源码文档中的服务器端脚本语言之一。同时,php还提供了一个命令行接口,因此,其也可…...

C++中boost库的安装及使用(Windows)
Boost库的安装及使用 引言使用现有的boost库安装及使用引言 C++开发中经常会用到boost库,本文记录一下Windows上boost在visual studio2019上的使用。 Boost库是一个跨平台的C++库集合,旨在为C++开发者提供一系列高质量的通用功能。不同的Visual Studio(VS)版本并不要求安…...

CPP编程-CPP11中的内存管理策略模型与名称空间管理探幽(时隔一年,再谈C++抽象内存模型)
CPP编程-CPP11中的内存管理策略模型与名称空间管理探幽 CPP的四大内存分区模型 在 C 中,**内存分区是一种模型,用于描述程序运行时内存的逻辑组织方式,但在底层操作系统中,并不存在严格意义上的内存分区。**操作系统通常将内存分…...

springboot项目整合minio实现文件的分布式存储
minio是一款分布式存储系统,上一篇详细介绍了minio在windows环境下的搭建集群并通过nginx实现负载均衡,这里简单介绍下springboot项目整合minio并实现文件的上传下载删除等操作。 一、依赖的引入 1.1、maven项目 <dependency><groupId>io…...

微信小程序开发学习笔记《19》uni-app框架-配置小程序分包与轮播图跳转
微信小程序开发学习笔记《19》uni-app框架-配置小程序分包与轮播图跳转 博主正在学习微信小程序开发,希望记录自己学习过程同时与广大网友共同学习讨论。建议仔细阅读uni-app对应官方文档 一、配置小程序分包 分包可以减少小程序首次启动时的加载时间 为此&#…...

Python内置模块
目录 什么是模块 模块分类 通过模块创建者分类 系统内置模块 第三方模块 在线安装 离线安装 模块导入 math和random模块介绍 math模块 random模块 什么是模块 在我们编写程序时,需要导入包。例如随机数的产生,需要import random。import XXX&…...

WordPress建站入门教程:小皮面板phpstudy如何安装PHP和切换php版本?
小皮面板phpstudy支持的PHP版本有很多,包括5.2.17、5.3.29、5.4.45、5.5.9、5.6.9、7.0.9、7.1.9、7.2.9、7.3.4、7.3.9、7.4.3、8.0.2、8.2.9。那么我们如何安装其他的php版本和切换网站的php版本呢?只需要简单几步即可,具体如下:…...

用友 NC saveDoc.ajax 任意文件上传漏洞复现
0x01 产品简介 用友NC是一款企业级ERP软件。作为一种信息化管理工具,用友NC提供了一系列业务管理模块,包括财务会计、采购管理、销售管理、物料管理、生产计划和人力资源管理等,帮助企业实现数字化转型和高效管理。 0x02 漏洞概述 用友 NC saveDoc.ajax接口处存在任意文件…...

如何使用达摩盘
目录 1.定义 2.功能:圈人群、画像洞察、同步到站内渠道投放; 1.定义 是阿里妈妈基于商业化营销场景打造的人群精细化运营定向中台,涵盖消费行为、兴趣偏好、地理位置等海量数据标签,为商家提供个性化人群圈选,识别店…...

网络编程的学习
思维导图 多路复用代码练习 select完成TCP并发服务器 #include<myhead.h> #define SER_IP "192.168.125.73" //服务器IP #define SER_PORT 8888 //服务器端口号int main(int argc, const char *argv[]) {//1、创建用于监听的套接字int sfd -1;s…...

【Mining Data】收集数据(使用 Python 挖掘 Twitter 数据)
@[TOC](【Mining Data】收集数据(使用 Python 挖掘 Twitter 数据)) 具体步骤 第一步是注册您的应用程序。特别是,您需要将浏览器指向 http://apps.twitter.com,登录 Twitter(如果您尚未登录)并注册新应用程序。您现在可以为您的应用程序选择名称和描述(例如“Mining Demo”…...

2024京津冀光伏展
2024年京津冀光伏展是一个专门展示京津冀地区光伏产业发展情况的展览会。光伏产业是指利用太阳能进行发电的产业,它在可再生能源领域具有重要的地位。京津冀地区是中国重要的经济区域,也是光伏产业的发展热点地区之一。 2024年京津冀光伏展将展示京津冀地…...

在C#中使用Linq
在C#中使用Linq 前言一、基本查询操作二、高级查询操作三、数据库查询四、文件和 XML 查询五、总结 前言 LINQ(Language Integrated Query)是 C# 中一种强大的查询语言集成特性,它使得在编程语言级别对数据进行查询和操作变得更加简单和直观…...

Swing程序设计(11)动作事件监听器,焦点事件监听器
文章目录 前言一、事件监听器是什么?二、详细展开 1.动作事件监听器2.焦点事件监听器总结 前言 如果你是坚持从Swing程序第一篇看到了这里,恭喜你,Swing程序设计简单地落下了帷幕,关于Swing程序更深的了解,可以自行学习…...

Python 开发图形界面程序
用 Python 语言开发图形界面的程序,有2种选择: Tkinter 基于Tk的Python库,这是Python官方采用的标准库,优点是作为Python标准库、稳定、发布程序较小,缺点是控件相对较少。 PySide2/PySide6 基于Qt 的Python库&#x…...

百度搜索引擎SEO优化方法
随着互联网的不断发展,搜索引擎已经成为人们获取信息、产品和服务的主要途径之一。而在中国,百度作为最大的搜索引擎,其影响力不可忽视。了解并掌握百度SEO关键词优化方法,对于提升网站在搜索引擎中的排名至关重要。 关键词选择&a…...

一文了解docker与k8s
随着 k8s 作为容器编排解决方案变得越来越流行,有些人开始拿 Docker 和 k8s 进行对比,不禁问道:Docker 不香吗? k8s 是 kubernetes 的缩写,8 代表中间的八个字符。 其实 Docker 和 k8s 并非直接的竞争对手两者相互依存…...

Linux基础——进程控制
1. 进程创建 在这之前我们曾了解过进程创建(详见进程初识(二)),我们在这里对fork函数做一些补充 其实对于父子进程来说,若是有一方试图修改数据时,会向物理内存中申请一份新空间,并…...