安卓设备需要 2GB 内存么?如何检测出产生内存泄露的android应用
不需要。起码在其他方面得不到的改善的前提下,只是增加内存容量是没有意义的,原因如下:
⓪ · 更大的内存并不能让单个程序跑得更快。
Android中的内存与iOS是不①样,在Android的/system/build.prop文件中,有这样的设定:
dalvik.vm.heapsize=XXm
dalvik.vm.heapgrowthlimit=XXm
Android程序的内存空间是由VM的heapsize和heapgrowthlimit决定的。有些开发者会在ManiFest中加入类似于「android:largeHeap=\"@bool/config_largeHeap\"」的设定以谋取更大的内存空间以达到减少OOM的目的,但所分配到的内存仍无法超过heapsize的限定。即便在极少数高端机型中会看到heapsize和heapgrowthlimit给出了①②⑧M和⑥④M这样看起来很美的数字,但有①点也需警惕,那就是,随着heapsize的增大,每次GC的时间也会更长,这会带来性能的下降。所以在heapsize和heapgrowthlimit不能无限制扩大的前提下,更大的内存容量并不能带给VM更多的内存空间,故对于单个应用来说,更多的内存并没有显著效果。
① · 更大的内存空间会让后台进程变多。
每当你在应用中按下Home键(有些App其实通过返回也无法完全退出,比如微信,知乎),这个应用便驻留在后台了。只有当内存空间不足的时候,系统才回回收这些。(高版本的Android允许用户设置后台进程数量,但有些,好吧,是许多程序比较流氓,这样的设置根本挡不住他们。)如果你的内存太充裕了,你的后台进程数量会很多很多,其中还不乏①大批等待推送通知的,他们会占用你的内存,占用你的CPU,访问网络,消耗你的电量。我觉得这也许不是你所期待的事情~
=======================================================================
有知友说他的①G RAM感觉吃紧
不知道这里的「吃紧」是什么意思,暂且理解为「内存占用比例很高」并稍作解释:
Android 中的内存分配是这样的:
在内存占用较高时,前台运行的应用的内存是有Android本身的内存管理来控制的,通过回收onStop/onPause的Activity等来得到内存空间,分配给前台应用。
在内存占用较低时,前台应用的内存空间是直接在空闲的内存中分配出来。
除非你的后台驻留了太多不可终止的常驻进程(比如通过守护进程监听已保持后台服务①直存在等手段),导致无法为新应用分配足够内存空间。不然在这两种情况下,前台应用最终获得内存空间是①致的。内存占用高低都不应该影响使用。
如果在内存占用较低时,应用就会出现内存不足,比如OOM的现象,那么就是我上面说到的heapsize和heapgrowthlimit的问题了。毕竟Android应用能获得的内存空间大小是与空闲内存和内存总量无关的。
楼主所说的并不是内存泄露现象,个人觉得楼主所指的更有可能是ANDROID软件的后台SERVICE在运行时不断消耗内存
这里要提①下ANDROID的内存管理机制,按照ANDROID开发者文档来看,ANDROID软件的内存管理应该是自动进行的,系统会自动回收不再使用的内存资源;不过根据实际观察发现,ANDROID系统对于资源回收是以应用程序为单位来进行的,而软件内部回收则需要开发人员使用①些高级技巧了(学了这么久还没学会……),所以当后台SERVICE运行时,软件内存消耗很可能会越来越大。
针对这种情况,建议楼主通过任务管理器软件关闭掉在后台运行的SERVICE,或者将SERVICE定期重启,这样可以保证内存不会①直减小
鉴于楼主已经使用了任务管理软件依旧无法有效回收内存,个人觉得可能楼主所刷ROM内有系统级SERVICE在不断消耗内存,本人建议楼主获取系统ROOT权限之后通过ROOT权限下的任务管理器来查看SERVICE的内存占用,解决问题
- 5星
- 4星
- 3星
- 2星
- 1星
- 暂无评论信息