.一、利用AndroidAPI函数查看1.1ActivityManager查看可用内存。ActivityManager.MemoryInfooutInfo=newActivityManager.MemoryInfo();am.getMemoryInfo(outInfo);outInfo.availMem即为可用空闲内存。1.2、android.os.Debug查询PSS,VSS,USS等单个进程使用内存信息MemoryInfo[]memoryInfoArray=am.getProcessMemoryInfo(pids);MemoryInfopidMemoryInfo=memoryInfoArray[0];pidMemoryInfo.getTotalPrivateDirty();getTotalPrivateDirty()ReturntotalprivatedirtymemoryusageinkB.USSgetTotalPss()ReturntotalPSSmemoryusageinkB.PSSgetTotalSharedDirty()ReturntotalshareddirtymemoryusageinkB.RSS二、直接对Android文件进行解析查询,/proc/cpuinfo系统CPU的类型等多种信息。/proc/meminfo系统内存使用信息如/proc/meminfoMemTotal:16344972kBMemFree:13634064kBBuffers:3656kBCached:1195708kB我们查看机器内存时,会发现MemFree的值很小。这主要是因为,在linux中有这么一种思想,内存不用白不用,因此它尽可能的cache和buffer一些数据,以方便下次使用。但实际上这些内存也是可以立刻拿来使用的。所以空闲内存=free+buffers+cached=total-used通过读取文件/proc/meminfo的信息获取Memory的总量。ActivityManager.getMemoryInfo(ActivityManager.MemoryInfo)获取当前的可用Memory量。三、通过Android系统提供的Runtime类,执行adb命令(top,procrank,ps...等命令)查询通过对执行结果的标准控制台输出进行解析。这样大大的扩展了Android查询功能.例如:finalProcessm_process=Runtime.getRuntime().exec("/system/bin/top-n1");finalStringBuildersbread=newStringBuilder();BufferedReaderbufferedReader=newBufferedReader(newInputStreamReader(m_process.getInputStream()),8192);#procrankRuntime.getRuntime().exec("/system/xbin/procrank");内存耗用:VSS/RSS/PSS/USSTerms•VSS-VirtualSetSize虚拟耗用内存(包含共享库占用的内存)•RSS-ResidentSetSize实际使用物理内存(包含共享库占用的内存)•PSS-ProportionalSetSize实际使用的物理内存(比例分配共享库占用的内存)•USS-UniqueSetSize进程独自占用的物理内存(不包含共享库占用的内存)一般来说内存占用大小有如下规律:VSS>=RSS>=PSS>=USSUSSisthetotalprivatememoryforaprocess,i.e.thatmemorythatiscompletelyuniquetothatprocess.USSisanextremelyusefulnumberbecauseitindicatesthetrueincrementalcostofrunningaparticularprocess.Whenaprocessiskilled,theUSSisthetotalmemorythatisactuallyreturnedtothesystem.USSisthebestnumbertowatchwheninitiallysuspiciousofmemoryleaksinaprocess.转载

阅读全文 >

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐