分享

从程序员的角度告诉你苹果为何坚持使用1G内存

 lentery 2016-08-12

  


  此篇文章并非为苹果洗地,个人观点苹果坚持使用1G内存的主要原因是成本控制和控制手机“强制报废”的年限,以及让下一代手机“更具有吸引力”。文章的目的是为了解释苹果为什么可以做到用如此低的配置能达到如此高的使用体验,让大家免于“纠结内存才1G”之苦。

  苹果使用1G内存但是不会卡的原因:Android 系统运行应用使用的是 Java 环境, 因此需要额外的内存来做垃圾回收 (garbage collection). 也就是当一个 Android 应用结束运行之后, Java 需要额外内存来回收该应用占去的内存. 一般来说, 在内存充裕的系统上, 这个机制运行得还不错. 一旦运行大批不同的应用, 问题就出现了. 以下表格显示, 一个 Android 应用理论上使用一份内存, 但是事实上却需要四份到八份的富余给 Java 去做回收, 系统才能够达到流畅. 开很多 Android 应用会卡卡卡卡卡, 就是这个原因.

  这样我们就可以理解为什么 Android 机型要配置海量内存了, 因为更多内存消耗更多电力, 自然厂商也不得不增加电池容量, 来保证续航时间. 而 iOS 系统从设计开始, 就不是这样的垃圾回收机制, 而是应用要求多少就分配多少. 所以 Android 旗舰机型是人前风光宣传自己海量内存加大容量电池, 人后暗暗辛酸落泪.

  


  虽然不是苹果死忠,但是本人对苹果产品也十分有兴趣,于是彻夜等待果6发布会,等到参数爆出来那一刻跟大家一样忍不住吐槽,尼玛都1080P了,为啥内存还是1G,这不要人命么!我把这话说给我朋友听,他立马就说IPHONE根本用不着2G内存,原因如下:

  苹果给每个应用程序设置20M的内存警告量,30M的闪退量,游戏会略微放款10~20M,需要向系统申请。

  这一条说明除了系统本身占用内存以外,任何程序几乎都不可能占用超过50M内存。←此句我着重解释一下,因为大家问题比较多,本来就是为了让更多纯小白玩家明白才这么写的。如果您完全不明白我说什么,无视红字即可。实际上,不是单个程序存在50M的内存使用上限,而是单线程使用上限是50M,同一个程序可以加载多个线程,同一个程序可以使用多个线程。剩下的我就不细说了。

  关于后台:

  苹果设计本身就没有后台,当你把程序最小化的时候程序就暂停了一切活动。如果应用想继续运行一部分功能的话,必须向系统申请运行时长,或者调用系统功能,比如音乐播放。由此跟安卓需要大内存来支持后台运行的区别就显而易见了,因为安卓是在Linux上跑的Java虚拟机,他的内存管理机制是申请之后就一直在那放着,等一个Runtime周期结束之后会自动收回不必要的内存。

  关于大型软件退回到主页以后再次进入不是最小化,而是直接重启的原因,我本来认为是内存溢出导致程序崩溃,在闪退以后释放内存并重新加载导致的程序重启,不过我朋友不同意此观点,解释如下:

  “大型游戏崩溃是因为绝大部分程序员是从Java转过来的,在进入背景的时候,有一个application Did Backgroung这么一个方法,他们会在这里进行想要的内存申请工作,以便达到他们期待的后台运行的目的,但是在applicationDidBecameActive的时候却没有把握好页面加载的时机,一次性把全部资源加载进内存导致超出系统允许范围,就崩溃了。”这句话结合本文第三段来看,确实很好的解释了为什么有的游戏会崩溃,尤其是多平台游戏,而苹果独占游戏几乎没有闪退的原因。

  简而言之的话,就是苹果只要不出真正的后台运行,它就基本上不会把内存提升到1G以上。当然或许也有可能是系统自身运行需要1G以上的话,苹果也是会推出大内存版的。

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多