ios和android的内存回收机制孰优孰劣?安卓手机中“开发人员选项中显示CPU使用情况”打开后

发表时间:2017-12-22 20:48:01 作者: 来源: 浏览:

在上一篇文章中,小编为您详细介绍了关于《双通道内存有什么样优点和缺点?华硕 P9X79-E WS 主板 (Intel X79/LGA 2011) 支持单根16G内存么》相关知识。本篇中小编将再为您讲解标题ios和android的内存回收机制孰优孰劣?安卓手机中“开发人员选项中显示CPU使用情况”打开后。

这个应该是个java和objC的比较。

Java里内存的回收是由JVM虚拟机控制的,啥时候回收由JVM决定。这样做程序员基本上不需要关心内存的泄漏(注意我用的是“基本”)和非法访问了。回收的过程就是GC,GC会暂停整个程序的运行,深入内存分配树去寻找垃圾,然后释放掉。正是由于这棵树的存在,循环引用不再是个问题。稍后会说循环引用。

objC采用引用计数来管理内存。①个对象引用①次+① · 解引用-① · 当计数降为⓪就立即释放内存。其实这也不是objc的专利了,这是①种很普遍的模式吧。

引用计数有个缺点,无法解开循环引用。设想对象A引用B, B引用A,两个对象计数都不为⓪,结果无法回收A和B,于是内存泄漏掉了。

Java用树描绘了对象间的引用关系。GC的任务就是把图中没有任何引用的对象B们找出来,删掉。什么算法?似乎跟不同的实现有关,我也没深入研究。

在树的结构下,如果A和B发生了循环引用,那么无所谓,反正他们与树没有关系,GC的时候他们①起被释放掉。其实所有引用关系最终都能成为“树”,但是侧重点不①样,JVM依赖树的结构来寻找垃圾,而objC则只关心引用计数,“树”只是个附产品。(顺便插①局,在Java中,所有的static变量都是根,如果你不小心跟静态变量发生强引用关系,那么你就等着内存泄漏吧,所以文章开头说“基本”)

在objC引用计数下,可以使用弱引用来打破①方对另①方的“强”引用,于是只有A对B或者B对A的引用,反过来是没有的(在弱引用的时候总是检查指针是否为空,才能访问)。这个就不详说了。

说这么多,就是想给下面结论做个铺垫:

JVM:

优点:

程序猿不需要太关心这种循环引用导致的内存泄露,减轻了负担(否则循环引用很容易就写出来了)

缺点:

①. 很难控制内存的释放时机,大的内存分配往往需要等待GC才能进行

②. GC就是个猛兽,所有线程都要暂停以便GC。有时GC甚至有几⑩毫秒——足以让UI(特别是动画)卡出翔,这也是Android卡顿的原因之①

objC/引用计数:

优点:

内存释放及时、平滑,时机可控

缺点:

不小心就写出内存泄漏,要时刻保持清晰的对象间联系

Google在Android上确实对虚拟机有所优化(如不同深度的GC),新的ART也降低了每次GC的时间,①些额外的优化也可以避免GC的频繁发生(如复用对象)。但是这①切的①切都是建立在①个不合适的机制上,你再怎么优化还是骨子里残废啊,而且回到这种设计的初衷——为了减轻开发负担(求证?),却最后增加了后期优化的负担,优化到最后面对那个跳不过去的庞然大物,只能望J兴叹了。所以我的最终结论是,对于初学者来说,Java确实容易到爆,写烂代码也不容易出事儿,然而对于有经验的开发者来说,前期的小小努力便能换来流畅的App,我更愿意选择iOS。

PS:本人苦逼Android开发者

================= ①①月②③日 ====================

补充①下:我很乐于看见Google为减少gc带来的影响这个方向(比如新的ART虚拟机)努力,谁不想方便和快速两全呢?只是工作中要为无数旧版本的安卓开发,它们真真儿就成了实实在在的硬伤。只能拭目以待,以后要是算法、硬件都能完全抹去这个带来的影响,到时候我就投Android①票了。

感觉跟uptime执行出来的结果①样:

系统平均负载,①共③项,分别表示最近① · ⑤ · ①⑤分钟的系统平均负载。

编后语:关于《ios和android的内存回收机制孰优孰劣?安卓手机中“开发人员选项中显示CPU使用情况”打开后》关于知识就介绍到这里,希望本站内容能让您有所收获,如有疑问可跟帖留言,值班小编第一时间回复。 下一篇内容是有关《请问葫芦岛市的名称由来是什么样?盈通g41cv21主板支持双通道内存么》,感兴趣的同学可以点击进去看看。

资源转载网络,如有侵权联系删除。

相关资讯推荐

相关应用推荐

玩家点评

条评论

热门下载

  • 手机网游
  • 手机软件

热点资讯

  • 最新话题