首页 > 代码库 > 为什么安卓系统大内存却比IOS卡顿

为什么安卓系统大内存却比IOS卡顿

内存管理,深受Windows下释放内存加速系统毒害,人们误以为内存剩余越多越好。其实不然,当一个应用程序退出时,OS不应该立即释放其内存,而是要等到内存不够用了才开始释放。Why?

(1)有些应用频繁启动关闭,启动时,如果程序已经加载到了内存中,那么启动速度将飞快。相反的,如果不在内存,就需要从外部存储里面读取,需要等待,比较慢。

(2)内存使用率越高越好。内存是易失性存储设备,当断电了数据就会消失,使用时还需要不断刷新。刷新0,还是1,对于功率是不会产生大的影响,所以也不会存在,内存使用率低,节约电的说法。内存就是拿来存CPU需要的程序和数据的,使用率越高越好。

再来说,安卓和IOS系统,这两个都是很好的移动设备操作系统。

安卓内存管理:

安卓系统架构图


安卓利用Linux kernel内核管理操作硬件,集成各种Libraries,将应用程序构建在VM(虚拟机)上,每个App运行时,都会打开一个独立的VM,这样设计是为了避免一个App崩溃导致整个系统无法运行。每个App都开一个VM,当然就会占用很多的内存。物理内存是有限的,所以必须想办法收集内存。【详细介绍Java垃圾回收机制 】 这里是之前转载的一篇垃圾收集GC的博文。在VM内部可以直接使用JAVA的GC机制,但还不够,因为有很多App开了很多VM,这就需要制定一个策略,释放掉一些VM,或者将onStop/onPause的Activity释放掉。最后,需要说明的一点就是,VM的大小不是无限的,在/system/build.pro文件中有设定:vm.heepsize= ???M,vm.heapgrowthlimit=???M。

IOS内存管理:

IOS属于类Unix操作系统,使用Objective-C编程,最新可使用Swift编程。相比于安卓使用的Java语言,IOS编程语言的可控性更强,更偏向底层,因而执行效率高,但开发难度也相对大。系统级的编程语言以及对用户体验的关注,给IOS带来了极为流畅的使用体验。IOS也能够通过引用计数的方式完成GC,但是和Java的GC机制相差甚远。IOS 以Darwin为基础,而Darwin是Mac OS X操作系统的基础核心,是一种以基础核心架构来制作的Mackernel,结合了Mach内核和FreeBSD两套程序。由于底层基础相似,IOS上的内存管理与OS X相似,也就是和Mac OS X系统管理内存的方式一致,也可能更弱。这里就不能理解成为和Windows一样了,Windows的内存管理非常糟糕,还经常有些内存无法回收,导致内存消耗殆尽不得不重启机器。使用过Mac OS X 的人都可以感受到,OS X极为流畅,这得益于其优秀的内存管理系统。

IOS系统架构图





主要是什么原因导致了安卓占用更多内存却不如IOS流畅?

导致安卓App占用大量内存的原因有很多,主要原因在于:安卓允许多任务后台运行,安卓App developer提升后台常驻权限,导致了大量App占用内存无法释放。这个问题在IOS上就不会出现,除了自带程序,音乐类程序运行后台播放、定位软件等,其他都没有后台常驻权限,但是运行App推送消息给用户,这样就缓解了聊天工具的在线问题。

在按下Home键后,IOS只保存了一个退出时截图,这也是为什么双击Home键会出现一系列缩略图的原因。这时不必急于将不用的App释放掉,释放内存的工作应该由OS来完成,OS会在内存紧缺的时候根据一定的规则释放掉不用的App并将有用数据存储。


在安卓系统下,单个App使用的内存受限于VM的heapsize,heapsize越大在VM上GC一次所需要的时间就越长。由于安卓系统大量的常驻内存程序存在,导致系统无法回收不使用的App内存。这样为了保证自己的App能够有足够的内存运行,developer就会先申请足够的内存,增大heapstartsize,堆分配的初始大小,加剧内存RAM的消耗,关键是提升权限为后台常驻。这样就使得App内存无法回收,但是用户总会打开新的App,怎么办?其实在App占用内存不断增加的时候,会触发GC和对调整策略,可以回收部分内存,但远远不够,于是便回收onStop/onPause的Activity。需要注意,每次GC的时间也随着heap变大而增长,完全就是一个恶性循环。


Developer申请足够内存for流畅  - > heap增大 - > 内存不够 -> 后台常驻Activity无法释放 - > heap增大,GC时间增长 

- >  占用CPU - > 性能下降 - > 提升配置,增大内存,高频多核CPU - > Developer申请足够内存for流畅 - >……


ps:仿佛看到了Wintel联盟,你负责提升硬件配置,我负责消耗掉剩余资源,迫使用户再次升级,你卖硬件赚钱,我卖软件赚钱,大概市场就是这样培养出来的吧




为什么安卓系统大内存却比IOS卡顿