Android手机需要清内存吗?需要吗?需要吗?需要吗?结论是再明显不过:不需要!其实这个结论也适用iPhone手机,iOS在内存管理方面更为激进。
很长一段时间以来,人们通过以下的办法清理手机内存
1.通过清理程序的缓存文件
2.下载单独的软件,清理手机内存
3.系统UI自动清理手机
看着各种软件火速清理内存的图片,瞬间感觉自己手机变快了的小伙伴没有有?可经过调查发现,这样的清理内存举动,除了心理上让手机用户感觉快点以外,并没有太多实际用处。下面,我们将从实际安卓实际运行机制来阐述这个问题。
Android中可用内存只是个没意义的数字
在Windows中,可用内存是越多越好,但在Android中,完全不必在意这个数据。在下图中,有着3GB内存的某手机,实际可用内存只有1.3GB左右(MemFree+Cached),你可千万别说这个系统好垃圾,只能显得自己的无知。
MemFree+Cached才是真正可使用的内存容量
Windows中只有需要用到内存时才会为程序分配内存,一旦这个程序被关闭,分配的内存也就释放出来成为新的可用内存。然而绝大多数Android应用都没有退出的菜单设计,这些运行过的应用无非是从前台转入到后台,大多数依旧保留在内存中并不会也不需要主动释放,这样下次再运行该应用时,可以更快的启动。
无论手机的物理内存有多大,Android都能将其充分利用,将需要用到(包括之前用过的)的数据从硬盘读入到内存,利用内存的高速保证系统的数据访问性能,也就是说,可用内存越小,内存的利用率就更高,其中的数据就越多,数据访问的命中率就越高,系统也就越快。
实用性第一!Android内存管理机制
有多少内存就用多少,空闲内存全部当缓存。也就是,当一个进程停止活动,Windows 会把它从内存中清除,但Android会把进程保留在内存里,这样下次启动时就会非常快,因为省去了再次从储存设备读取的时间,只有当内存不足以启动一个新进程时,Android 才会清除某些驻留在内存中停止活动的进程。
每个进程以Java 虚拟机独立存在,互不干扰。确保 Android 的稳定性,正常情况下即使单个进程崩溃,整个系统也不会崩溃,也永远没有内存不足的提示出现。
万万没想到Android有着优秀的内存回收机制
作为Android的开发语言Java没有提供任何操作来释放内存(这也是与iOS很大的不同点),是通过系统的内存回收机制来进行管理。Android使用了一个名为Low Memory Killer(LMK)的机制来管理内存,当内存出现不足时,LMK就开始挥舞屠刀杀掉一些进程。
Android会对进程的重要性进行评估,以oom_adj来表示,oom_adj的值越小,则重要性越高,oom_adj的值越大,该进程被系统选中杀掉的可能性越高,当oom_adj值为0,这意味着它永远不会被系统终止。Android有一套自己独特的进程管理,比如可以设定“当内存小于22M时,结束oom_adj大于14的进程”这样的策略,可以看到oom_adj非常重要,关乎进程的死生命运。
在默认策略中,当内存低于24MB(6144×4K)时,LMK就会杀掉所有oom_adj为15的进程(即空进程),这个警戒值可以人为修改,一般情况下也没必要去改变它。为了更好的评估进程的重要性,Android将进程分为六类。
总有一些坏孩子,注意那些偷电和流量的程序
正常的用户应用在退出之后要不就成为后台进程,要不就成为空进程。这些进程已经暂停了运行,不占用 CPU 资源和电量。在内存不足,用户需要打开另外的应用时,就会自动清除掉,所以完全不需要清理内存。相反有时清理了内存之后系统反而需要用大量的电量和 CPU 去重启必要的进程。
一些不安分的应用作者在写应用的时候就为应用申请了各种各样的主要服务和次要服务,导致用户退出后仍然继续运行。这种现象在一些国产应用上尤其常见。
——转自电脑报读者俱乐部微信
>> 除非说明均为原创,如转载请注明来源于http://www.stormcn.cn/post/1726.html