gpt4 book ai didi

android - 如何在 Android 上解释/proc/meminfo 的值?

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:09:53 25 4
gpt4 key购买 nike

我正在编写一个需要测量当前可用/已用 RAM 的 Android 应用程序。

搜索此站点显示了多个具有相似主题的主题,通常建议两种方法:


方法一:

MemoryInfo mi = new MemoryInfo();
ActivityManager activityManager = (ActivityManager)getSystemService(ACTIVITY_SERVICE);
activityManager.getMemoryInfo(mi);
long availableMegs = mi.availMem / 1048576L;
totalMegs = mi.totalMem / 1048576L; //available since API 16 only

方法 2:解析/proc/meminfo。

我已经尝试了这两种方法,它们似乎工作正常。我从这两种方法中得到相同的值。我的问题是,当我转到屏幕底部的 Settings -> Apps -> Running 时,会显示有关可用/已用 RAM 的信息,这与我通过上述方法获得的信息不同。我怀疑谷歌确实将缓存的应用程序报告为可用内存,因为当我终止一些缓存进程时,谷歌报告的 RAM 使用量几乎没有变化,但我的应用程序的数量接近我刚刚终止的正在运行的进程的大小。

例子:

方法 1 输出:

meminfo: avail: 660, total: 821, used: 161

方法 2 输出:

root@android:/proc # cat meminfo
MemTotal: 840868 kB
MemFree: 548080 kB
Buffers: 0 kB
Cached: 128300 kB
SwapCached: 0 kB
Active: 192052 kB
Inactive: 79816 kB
Active(anon): 157792 kB
Inactive(anon): 0 kB
Active(file): 34260 kB
Inactive(file): 79816 kB
Unevictable: 0 kB
Mlocked: 0 kB
SwapTotal: 0 kB
SwapFree: 0 kB
Dirty: 0 kB
Writeback: 0 kB
AnonPages: 143580 kB
Mapped: 67584 kB
Slab: 6736 kB
SReclaimable: 2104 kB
SUnreclaim: 4632 kB
PageTables: 4008 kB
NFS_Unstable: 0 kB
Bounce: 0 kB
WritebackTmp: 0 kB
CommitLimit: 420432 kB
Committed_AS: 1606616 kB
VmallocTotal: 122880 kB
VmallocUsed: 20588 kB
VmallocChunk: 77828 kB

MemFree + Cached = 660MB


Android reported RAM usage: 679MB Free, 142MB used.

如何获得与 Android 报告相同的数字?

我假设我必须从 /proc/meminfo 获取它,因为官方 API 似乎不存在。

最佳答案

MemTotal — 物理 RAM 总量,以千字节为单位。

MemFree — 系统未使用的物理 RAM 量(以千字节为单位)。

缓冲区 — 用于文件缓冲区的物理 RAM 量(以千字节为单位)。

缓存 — 用作缓存内存的物理 RAM 量(以千字节为单位)。

SwapCached — 用作缓存内存的交换量(以千字节为单位)。

Active — 处于 Activity 状态的缓冲区或页面缓存内存总量(以千字节为单位)。这是最近使用过的内存,通常不会回收用于其他目的。

Inactive — 空闲和可用的缓冲区或页面缓存内存总量(以千字节为单位)。这是最近未使用的内存,可以回收用于其他目的。

HighTotal 和 HighFree — 未直接映射到内核空间的总内存量和可用内存量(以千字节为单位)。 HighTotal 值可能因使用的内核类型而异。

LowTotal 和 LowFree — 直接映射到内核空间的总内存量和空闲内存量(以千字节为单位)。 LowTotal 值可能因使用的内核类型而异。

SwapTotal — 可用交换总量,以千字节为单位。

SwapFree — 可用交换总量,以千字节为单位。

脏 — 等待写回磁盘的内存总量(以千字节为单位)。写回 — 主动写回磁盘的内存总量(以千字节为单位)。

已映射 — 已使用 mmap 命令映射设备、文件或库的内存总量(以千字节为单位)。

Slab — 内核用来缓存数据结构供其自身使用的内存总量(以千字节为单位)。

Committed_AS — 估计完成工作负载的内存总量(以千字节为单位)。该值表示最坏情况下的值,还包括交换内存。 PageTables — 专用于最低页表级别的内存总量(以千字节为单位)。

VMallocTotal — 总分配的虚拟地址空间的内存总量(以千字节为单位)。

VMallocUsed — 已用虚拟地址空间的内存总量(以千字节为单位)。

VMallocChunk — 可用虚拟地址空间的最大连续内存块(以千字节为单位)。

HugePages_Total — 系统的大页面总数。该数字是通过将 Hugepagesize 除以为/proc/sys/vm/hugetlb_pool 中指定的大页面预留的兆字节得出的。此统计数据仅出现在 x86、Itanium 和 AMD64 架构上。

HugePages_Free — 系统可用的大页面总数。此统计数据仅出现在 x86、Itanium 和 AMD64 架构上。

Hugepagesize — 每个大页面单元的大小(以千字节为单位)。默认情况下,该值在 32 位体系结构的单处理器内核上为 4096 KB。对于 SMP、hugemem 内核和 AMD64,默认值为 2048 KB。对于 Itanium 体系结构,默认值为 262144 KB。此统计数据仅出现在 x86、Itanium 和 AMD64 架构上。

关于android - 如何在 Android 上解释/proc/meminfo 的值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19104635/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com