- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我正在编写一个需要测量当前可用/已用 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/
在经历了DDOS攻击后,不知何故/proc/kcore非常巨大,我使用一个小的php类来检查当前的磁盘空间,以及已经使用了多少。 它显示以下内容: Total Disk Space: 39.2 GB
所以我从 ruby 移植了一个工具,可以在对象上定义回调 block ,我希望在设置回调的情况下调用它。所以基本上是这样的。 def set_block(&block) @new_kid_on
我定义了两个脚本:第一个脚本调用第二个脚本中的 proc。第二个脚本定义了一个命名空间 fooSpace , 定义了一个变量 fooValue内fooSpace , 并定义了一个过程 myProc内f
使用一个 proc 时,我的脚本工作正常(检索 sftp 提示)。但是当我尝试在 proc 中使用 proc 时,脚本卡住了,我不知道为什么。 请不要重构代码,这不是重点,我需要了解这里的问题。 工作
我想知道是否有一种方法可以识别某些proc文件中用于DMA映射的内存,例如mtrr和iomem,或者通过lspic -vv . 在我的/proc/mtrr中,只有一个无法缓存区域,它似乎几乎指向3.5
我有 2 个过程,它们一个接一个地调用。第一个过程使用 diff 功能并创建 file.txt。压缩文件后的过程。问题是当我运行脚本时,file.txt 是空的。当我注释掉压缩过程时,文件中打印了差异
我曾经认为 /proc/self 和 /proc/$$ 在 bash 终端中是一样的,但现在我发现它们是不同的。 我知道$$是当前进程的pid,/proc/self是当前运行的进程,应该是bash终端
在下面的程序中,我想在第 2 个过程中捕获数据包,而 ping 在第 1 个过程中运行。现在,如果我执行这个程序,proc 正在运行 ping 并退出它。有解决此问题的想法吗? 我的 TCL 代码:
在 proc 中,您可以获得 proc 名称(无需对其进行硬编码)吗?例如 proc my_proc { some_arg } { puts "entering proc [some way
我有一个自定义的 A10 存储库,我试图在其中创建一个能够读取 /proc/[pid]/some-file 的应用程序文件,例如stat和 status ,有点像 ps做。 看完这篇 answer很明
我是 TCL 的新人。我通过 Windows Vista 下的 DOS 窗口“tclsh85 FOD/Scripts/program1.tcl”执行 TCL 代码。 program1.tcl 包含“s
我想查看每个进程的精确内存量用作匿名页,因为匿名内存不能调出,因此精确跟踪此使用情况非常重要。 获取匿名页面总数的一种方法是读取/proc/meminfo AnonPages。 另一种方法是将 sma
在 Ruby 中,Proc.new { 'waffles' } 和 proc { 'waffles' } 之间有什么区别吗?我发现很少有人提到第二种语法。 使用 irb 进行测试,我没有发现任何明显的
我正在寻找有关Linux系统上/proc/net/nf_conntrack和/或/proc/net/ip_contrack文件内容的详细文档。 是的,我知道,有许多实用程序可以用人类可读的格式向我显示
而不是执行多个单独的 PROC FREQ一个非常大的数据集上的程序,我想通过执行单个 PROC FREQ 来提高效率与多个 TABLE声明。我们的 QA 流程需要表格标题,这很简单,只需一个 TABL
我想在 /proc/driver 下创建一个文件目录。我想使用像 proc_root_driver 这样的宏(或提供的其他东西)而不是明确使用“驱动程序/模块名称”。我用 create_proc_en
在 SQL Server 2005 中,我希望名为 LimitedUser 的用户只能运行一个过程: GRANT EXEC ON [usp_RunETL] TO [LimitedUser] 但是,该
考虑到以下两个过程: proc firstOne(): void = echo "X" proc secondOne(): void = echo "X" discard 它们
我想使用 PROC TABULATE 复制 PROC MEANS 的输出。原因是我希望将利润百分比(或利润率)作为 PROC MEANS 输出中的变量之一,但希望抑制一个或多个统计数据的计算,即会有一
我的目标是使数据适合具有正支持的任何分布。 (威 bool (2p)、 Gamma (2p)、帕累托 (2p)、对数正态 (2p)、指数 (1P))。第一次尝试,我使用了 proc univariat
我是一名优秀的程序员,十分优秀!