安卓内存信息查看
目录
- 前言
- 一、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接口处存在任意文件…...
谷歌浏览器插件
项目中有时候会用到插件 sync-cookie-extension1.0.0:开发环境同步测试 cookie 至 localhost,便于本地请求服务携带 cookie 参考地址:https://juejin.cn/post/7139354571712757767 里面有源码下载下来,加在到扩展即可使用FeHelp…...

C++_核心编程_多态案例二-制作饮品
#include <iostream> #include <string> using namespace std;/*制作饮品的大致流程为:煮水 - 冲泡 - 倒入杯中 - 加入辅料 利用多态技术实现本案例,提供抽象制作饮品基类,提供子类制作咖啡和茶叶*//*基类*/ class AbstractDr…...

TDengine 快速体验(Docker 镜像方式)
简介 TDengine 可以通过安装包、Docker 镜像 及云服务快速体验 TDengine 的功能,本节首先介绍如何通过 Docker 快速体验 TDengine,然后介绍如何在 Docker 环境下体验 TDengine 的写入和查询功能。如果你不熟悉 Docker,请使用 安装包的方式快…...
AtCoder 第409场初级竞赛 A~E题解
A Conflict 【题目链接】 原题链接:A - Conflict 【考点】 枚举 【题目大意】 找到是否有两人都想要的物品。 【解析】 遍历两端字符串,只有在同时为 o 时输出 Yes 并结束程序,否则输出 No。 【难度】 GESP三级 【代码参考】 #i…...

大数据零基础学习day1之环境准备和大数据初步理解
学习大数据会使用到多台Linux服务器。 一、环境准备 1、VMware 基于VMware构建Linux虚拟机 是大数据从业者或者IT从业者的必备技能之一也是成本低廉的方案 所以VMware虚拟机方案是必须要学习的。 (1)设置网关 打开VMware虚拟机,点击编辑…...

android13 app的触摸问题定位分析流程
一、知识点 一般来说,触摸问题都是app层面出问题,我们可以在ViewRootImpl.java添加log的方式定位;如果是touchableRegion的计算问题,就会相对比较麻烦了,需要通过adb shell dumpsys input > input.log指令,且通过打印堆栈的方式,逐步定位问题,并找到修改方案。 问题…...

阿里云Ubuntu 22.04 64位搭建Flask流程(亲测)
cd /home 进入home盘 安装虚拟环境: 1、安装virtualenv pip install virtualenv 2.创建新的虚拟环境: virtualenv myenv 3、激活虚拟环境(激活环境可以在当前环境下安装包) source myenv/bin/activate 此时,终端…...
Vue3中的computer和watch
computed的写法 在页面中 <div>{{ calcNumber }}</div>script中 写法1 常用 import { computed, ref } from vue; let price ref(100);const priceAdd () > { //函数方法 price 1price.value ; }//计算属性 let calcNumber computed(() > {return ${p…...
OCR MLLM Evaluation
为什么需要评测体系?——背景与矛盾 能干的事: 看清楚发票、身份证上的字(准确率>90%),速度飞快(眨眼间完成)。干不了的事: 碰到复杂表格(合并单元…...

负载均衡器》》LVS、Nginx、HAproxy 区别
虚拟主机 先4,后7...