内存回收机制哪家强?android及ios内存回收机制优劣对比
来点涨姿势的吧。现在电视市场的新品非常非常少,就算是发布新品也围绕着处理器核心和屏幕分辨率进行的。
而手机市场上却又辣么辣么多的新品发布,动不动就是2K屏幕、8核心及3G内存。
说到内存,各位使用过安卓设备的朋友一定希望安卓系统的内存越大越好。但反观来看,苹果的设备内存却一直为此在1GB呢?(新出的ipad air2为2GB内存,但是可以暂时不提。)
其实这是安卓系统及ios系统内存回收机制的区别。
所以,本篇就来点涨姿势的内容吧:内存回收机制哪家强?android及ios内存回收机制优劣对比。
其实探讨到内存回收机制,不得不得到双方的开发平台:java和Objective-C。
Java
Java里内存的回收是由JVM虚拟机控制的,回收时间及回收量完全是由JVM决定。优势是攻城狮完全不用操心内存泄露的问题和非法访问。
简而言之是Android所有可用的内存仅限于系统 RAM,当 Android 应用程序退出时,并不清理其所占用的内存,Linux 内核进程也相应的继续存在,所谓“退出但不关闭”。从而使得用户调用程序时能够在第一时间得到响应。当系统内存不足时,系统将激活内存回收过程。为了不因内存回收影响用户体验(如杀死当前的活动进程)。
回收过程就是GC,具体可以描述为:
内存回收的线程:主线程变成→低线程;单线程变成→多线程
内存回收时机:App空闲时、可用内存少时、分配大内存空间不够时
内存回收方式:无分代技术,一次性GC所有对象;分代技术,分为年轻、老年代、持久代。
Objective-C
Objective-C的内存回收方式是引用计数的内存回收方式。凡是继承NSObject的类生成的对象,当对象的计数为0,会对对象执行dealloc并回收。引用计数有个缺点,无法解开循环引用。设想对象A引用B, B引用A,两个对象计数都不为零,结果无法回收A和B,于是内存泄漏掉了。
这也是为什么楼主认识的一些攻城狮经常吐槽给ios开发程序很麻烦的原因,但是很锻炼技术。
对比Java的情况:
Java用树描绘了对象间的引用关系。GC的任务就是把图中没有任何引用的对象B们找出来,删掉。什么算法?似乎跟不同的实现有关,我也没深入研究。JVM依赖树的结构来寻找垃圾,而Objective-C则只关心引用计数,“树”只是个附产品。
好了。 废话了这么多,能到关键内容了么?
嗯~
**** Hidden Message ***** 好纠结斤斤计较健健康康咔咔咔哦哦哦哦开机 强烈支持楼主ing…… 强烈支持楼主ing…… 学习学习! 强烈支持楼主ing…… 支持,谢谢分享 http://imgurl.eicp.net/image/flash6003.swf学习学习! 非常感谢楼主 好好好好好好好好
页:
[1]
2