当前位置: 首页 > news >正文

安卓内存信息查看

目录

  • 前言
  • 一、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模型没有使用循环神经网络&#xff0c;无法从序列中学习到位置信息&#xff0c;并且它是并行结构&#xff0c;不是按位置来处理序列的&#xff0c;所以为输入序列加入了位置编码&#xff0c;将每个词的位置加入到了词向量中…...

MySql、Navicat 软件安装 + Navicat简单操作(建数据库,表)

一、MySql、Navicat 软件安装 及正常使用 MySql下载&#xff0b;安装&#xff1a; 检查安装情况&#xff1a; 配置环境变量&#xff1a; 搞定了&#xff01;&#xff01;&#xff01; 可以登陆试哈哈哈 连接navicat 开始创建数据库 二、 商品种类表 - commoditytype int …...

逆向案例五、爬取b站评论,表单MD5加密

1.便捷写爬虫网站&#xff1a; Convert curl commands to code 使用流程&#xff1a;又点击想要抓的包&#xff0c;复制URL&#xff08;base&#xff09;格式复制 在上面链接中粘贴即可 2.找到含有评论的包&#xff08;即main?oid)&#xff1a;观察表单发现两处参数在变化&…...

010-原型链

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

Electron-builder打包安装包——编译篇

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

Red Hat系统升级内核版本

查看当前内核版本 uneme -r yum list kernel升级内核 yum update -y kernel检查升级后的内核版本 uneme -r yum list kernel升级系统中已安装的软件包到最新版本&#xff08;过程时间较长&#xff09; 目前只升级了系统内核&#xff0c;系统相关的安装包还是老的&#xff0…...

Java集合set之HashSet、LinkedHashSet、TreeSet的区别?

Java的集合中主要由List&#xff0c;Set&#xff0c;Queue&#xff0c;Map构成&#xff0c;Set特点&#xff1a;存取无序&#xff0c;不可以存放重复的元素&#xff0c;不可以用下标对元素进行操作。 HashSet 作为Set容器的代表子类&#xff0c;HashSet经常被用到&#xff0c…...

全方位碾压chatGPT4的全球最强模型Claude 3发布!速通指南在此!保姆级教学拿脚都能学会!

&#x1f389;&#x1f389;欢迎光临&#xff0c;终于等到你啦&#x1f389;&#x1f389; &#x1f3c5;我是苏泽&#xff0c;一位对技术充满热情的探索者和分享者。&#x1f680;&#x1f680; &#x1f31f;持续更新的专栏《Spring 狂野之旅&#xff1a;从入门到入魔》 &a…...

upload-Labs靶场“11-15”关通关教程

君衍. 一、第十一关 %00截断GET上传1、源码分析2、%00截断GET上传 二、第十二关 %00截断POST上传1、源码分析2、%00截断POST上传 三、第十三关 文件头检测绕过1、源码分析2、文件头检测绕过 四、第十四关 图片检测绕过上传1、源码分析2、图片马绕过上传 五、第十五关 图片检测绕…...

linux-rpm命令

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

如何利用python实现自己的modbus-tcp库

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

linux系统-----------搭建LNMP 架构

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

C++中boost库的安装及使用(Windows)

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

CPP编程-CPP11中的内存管理策略模型与名称空间管理探幽(时隔一年,再谈C++抽象内存模型)

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

springboot项目整合minio实现文件的分布式存储

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

微信小程序开发学习笔记《19》uni-app框架-配置小程序分包与轮播图跳转

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

Python内置模块

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

WordPress建站入门教程:小皮面板phpstudy如何安装PHP和切换php版本?

小皮面板phpstudy支持的PHP版本有很多&#xff0c;包括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版本呢&#xff1f;只需要简单几步即可&#xff0c;具体如下&#xff1a…...

用友 NC saveDoc.ajax 任意文件上传漏洞复现

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

谷歌浏览器插件

项目中有时候会用到插件 sync-cookie-extension1.0.0&#xff1a;开发环境同步测试 cookie 至 localhost&#xff0c;便于本地请求服务携带 cookie 参考地址&#xff1a;https://juejin.cn/post/7139354571712757767 里面有源码下载下来&#xff0c;加在到扩展即可使用FeHelp…...

C++_核心编程_多态案例二-制作饮品

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

TDengine 快速体验(Docker 镜像方式)

简介 TDengine 可以通过安装包、Docker 镜像 及云服务快速体验 TDengine 的功能&#xff0c;本节首先介绍如何通过 Docker 快速体验 TDengine&#xff0c;然后介绍如何在 Docker 环境下体验 TDengine 的写入和查询功能。如果你不熟悉 Docker&#xff0c;请使用 安装包的方式快…...

AtCoder 第409​场初级竞赛 A~E题解

A Conflict 【题目链接】 原题链接&#xff1a;A - Conflict 【考点】 枚举 【题目大意】 找到是否有两人都想要的物品。 【解析】 遍历两端字符串&#xff0c;只有在同时为 o 时输出 Yes 并结束程序&#xff0c;否则输出 No。 【难度】 GESP三级 【代码参考】 #i…...

大数据零基础学习day1之环境准备和大数据初步理解

学习大数据会使用到多台Linux服务器。 一、环境准备 1、VMware 基于VMware构建Linux虚拟机 是大数据从业者或者IT从业者的必备技能之一也是成本低廉的方案 所以VMware虚拟机方案是必须要学习的。 &#xff08;1&#xff09;设置网关 打开VMware虚拟机&#xff0c;点击编辑…...

android13 app的触摸问题定位分析流程

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

阿里云Ubuntu 22.04 64位搭建Flask流程(亲测)

cd /home 进入home盘 安装虚拟环境&#xff1a; 1、安装virtualenv pip install virtualenv 2.创建新的虚拟环境&#xff1a; virtualenv myenv 3、激活虚拟环境&#xff08;激活环境可以在当前环境下安装包&#xff09; source myenv/bin/activate 此时&#xff0c;终端…...

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

为什么需要评测体系&#xff1f;——背景与矛盾 ​​ 能干的事&#xff1a;​​ 看清楚发票、身份证上的字&#xff08;准确率>90%&#xff09;&#xff0c;速度飞快&#xff08;眨眼间完成&#xff09;。​​干不了的事&#xff1a;​​ 碰到复杂表格&#xff08;合并单元…...

负载均衡器》》LVS、Nginx、HAproxy 区别

虚拟主机 先4&#xff0c;后7...