获取iOS设备的内存状况
来源:互联网 发布:回购式转贴现 知乎 编辑:程序博客网 时间:2024/05/09 13:04
获取iOS设备的内存状况
获取iOS设备的内存状况
由于iPhone这类移动设备内存有限,而又不能使用交换区,为了不至于导致内存不足而引起运行效率降低或应用崩溃,有时候需要获取当前的内存状况,以决定采用的缓存策略。
不过iOS SDK文档里并没有提及这种底层的API,于是我搜了一番,找到了host_statistics()这个函数。
参数虽然很多,但基本上都是固定的值,我也就不解释,直接上代码了:
#include <mach/mach.h>
BOOL memoryInfo(vm_statistics_data_t *vmStats) {
mach_msg_type_number_t infoCount = HOST_VM_INFO_COUNT;
kern_return_t kernReturn = host_statistics(mach_host_self(), HOST_VM_INFO, (host_info_t)vmStats, &infoCount);
return kernReturn == KERN_SUCCESS;
}
void logMemoryInfo() {
vm_statistics_data_t vmStats;
if (memoryInfo(&vmStats)) {
NSLog(@"free: %u\nactive: %u\ninactive: %u\nwire: %u\nzero fill: %u\nreactivations: %u\npageins: %u\npageouts: %u\nfaults: %u\ncow_faults: %u\nlookups: %u\nhits: %u",
vmStats.free_count * vm_page_size,
vmStats.active_count * vm_page_size,
vmStats.inactive_count * vm_page_size,
vmStats.wire_count * vm_page_size,
vmStats.zero_fill_count * vm_page_size,
vmStats.reactivations * vm_page_size,
vmStats.pageins * vm_page_size,
vmStats.pageouts * vm_page_size,
vmStats.faults,
vmStats.cow_faults,
vmStats.lookups,
vmStats.hits
);
}
}
调用memoryInfo()就能拿到内存信息了,它的类型是vm_statistics_data_t。这个结构体有很多字段,在logMemoryInfo()中展示了如何获取它们。注意这些字段大都是页面数,要乘以vm_page_size才能拿到字节数。
顺便再简要介绍下:free是空闲内存;active是已使用,但可被分页的(在iOS中,只有在磁盘上静态存在的才能被分页,例如文件的内存映射,而动态分配的内存是不能被分页的);inactive是不活跃的,也就是程序退出后却没释放的内存,以便加快再次启动,而当内存不足时,就会被回收,因此也可看作空闲内存;wire就是已使用,且不可被分页的。此外,这篇文档也有作介绍。
最后你会发现,即使把这些全加起来,也比设备内存少很多,那么剩下的只好当成已被占用的神秘内存了。不过在模拟器上,这4个加起来基本上就是Mac的物理内存量了,相差不到2MB。
而总物理内存可以用NSRealMemoryAvailable()来获取,这个函数不需要提供参数,文档里也有记载,我就不写演示代码了。
- 获取iOS设备的内存状况
- 获取iOS设备的内存状况
- Android 获取内存使用状况的总结
- Android 获取内存使用状况的总结
- 获取内存使用状况
- [IOS] 获取设备和app所占用的内存
- IOS获取手机设备运行内存的方法
- iOS获取设备电量、内存、容量
- 获取当前ios设备的内存使用情况,获取客户端ip地址
- 获取jvm运行时内存状况
- 获取ios 设备的设备标识
- 获取iOS的设备型号
- iOS获取设备的序列号
- 获取IOS的设备类型
- IOS 获取设备的信息
- 获取IOS设备的代码
- iOS获取设备的语言
- iOS 获取设备的UUID
- 黑马程序员--java反射机制分析
- hdu how many prime numbers 筛选法求素数
- 第五届省赛总结
- libgdx 仿微信打飞机完成版本(终结版)
- Chapter 4 的问题
- 获取iOS设备的内存状况
- AndroidUI组件之AlertDialog
- 设置CheckBoxList 选择框大小(记录)
- mfc CStdioFile 类在 UNICODE 工程中WriteString 中文写入不进文件一种解决办法
- English learning method ---音标学习的瓶颈
- HDU--2846--Repository--字典树
- 用国内软件源为Ubuntu的apt-get提速方法
- bash输入vim化,解决输入命令后修改的难题
- JNI学习总结——本地代码中创建Java对象