安卓内存信息查看
目录
- 前言
- 一、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接口处存在任意文件…...
Vue记事本应用实现教程
文章目录 1. 项目介绍2. 开发环境准备3. 设计应用界面4. 创建Vue实例和数据模型5. 实现记事本功能5.1 添加新记事项5.2 删除记事项5.3 清空所有记事 6. 添加样式7. 功能扩展:显示创建时间8. 功能扩展:记事项搜索9. 完整代码10. Vue知识点解析10.1 数据绑…...
微信小程序之bind和catch
这两个呢,都是绑定事件用的,具体使用有些小区别。 官方文档: 事件冒泡处理不同 bind:绑定的事件会向上冒泡,即触发当前组件的事件后,还会继续触发父组件的相同事件。例如,有一个子视图绑定了b…...
【JavaSE】绘图与事件入门学习笔记
-Java绘图坐标体系 坐标体系-介绍 坐标原点位于左上角,以像素为单位。 在Java坐标系中,第一个是x坐标,表示当前位置为水平方向,距离坐标原点x个像素;第二个是y坐标,表示当前位置为垂直方向,距离坐标原点y个像素。 坐标体系-像素 …...
根据万维钢·精英日课6的内容,使用AI(2025)可以参考以下方法:
根据万维钢精英日课6的内容,使用AI(2025)可以参考以下方法: 四个洞见 模型已经比人聪明:以ChatGPT o3为代表的AI非常强大,能运用高级理论解释道理、引用最新学术论文,生成对顶尖科学家都有用的…...
【Java学习笔记】BigInteger 和 BigDecimal 类
BigInteger 和 BigDecimal 类 二者共有的常见方法 方法功能add加subtract减multiply乘divide除 注意点:传参类型必须是类对象 一、BigInteger 1. 作用:适合保存比较大的整型数 2. 使用说明 创建BigInteger对象 传入字符串 3. 代码示例 import j…...
在QWebEngineView上实现鼠标、触摸等事件捕获的解决方案
这个问题我看其他博主也写了,要么要会员、要么写的乱七八糟。这里我整理一下,把问题说清楚并且给出代码,拿去用就行,照着葫芦画瓢。 问题 在继承QWebEngineView后,重写mousePressEvent或event函数无法捕获鼠标按下事…...
Java数值运算常见陷阱与规避方法
整数除法中的舍入问题 问题现象 当开发者预期进行浮点除法却误用整数除法时,会出现小数部分被截断的情况。典型错误模式如下: void process(int value) {double half = value / 2; // 整数除法导致截断// 使用half变量 }此时...
【p2p、分布式,区块链笔记 MESH】Bluetooth蓝牙通信 BLE Mesh协议的拓扑结构 定向转发机制
目录 节点的功能承载层(GATT/Adv)局限性: 拓扑关系定向转发机制定向转发意义 CG 节点的功能 节点的功能由节点支持的特性和功能决定。所有节点都能够发送和接收网格消息。节点还可以选择支持一个或多个附加功能,如 Configuration …...
通过MicroSip配置自己的freeswitch服务器进行调试记录
之前用docker安装的freeswitch的,启动是正常的, 但用下面的Microsip连接不上 主要原因有可能一下几个 1、通过下面命令可以看 [rootlocalhost default]# docker exec -it freeswitch fs_cli -x "sofia status profile internal"Name …...
sshd代码修改banner
sshd服务连接之后会收到字符串: SSH-2.0-OpenSSH_9.5 容易被hacker识别此服务为sshd服务。 是否可以通过修改此banner达到让人无法识别此服务的目的呢? 不能。因为这是写的SSH的协议中的。 也就是协议规定了banner必须这么写。 SSH- 开头,…...
