e-works数字化企业网  »  文章频道  »  基础信息化  »  移动应用

简析Android的垃圾回收与内存泄露

2017/2/28    来源:安卓开发精选    作者:佚名      
关键字:Android  内存泄露  
本文作为入门文章,将浅显的讨论垃圾回收与内存泄露的原理,不讨论Dalvik虚拟机底层机制或者native层面的问题。

    现在,我们尝试运行如下代码
 
   引用关系
 
    这个程序很简单,我们可以脑补一下,它应该是启动了又瞬间关闭,但是事实真的是关闭了吗?
 
    稍有常识的人可以看出,它发送了一个Message,将在十分钟后运行,也就是说Message将被保持引用达到10分钟,这就照成了至少10分钟的内存泄露。
 
    最后正确的代码如下
 
引用关系
  
    结论
 
    GC是按照有向图是否可达来判断对象实例是否有用
 
    如果不在需要某个实例,却仍然被引用,这个情况叫做内存泄露
 
    匿名类/非静态类内部class会保持对它所在Activity的引用,使用时要注意它们的生命周期不能超过Activity,否则要用static inner class
 
    善于在Activy中的生命周期(比如onPause)中手动控制其他类的生命周期
 
    最后再补充一下iOS的情况,iOS在新版的OC与Swift中,已经引入了新的内存管理体系ARC(auto reference counting,引用自动计数),C代码在编译时,编译器自动适时的添加释放内存的代码。
 
责任编辑:李欢
本文为授权转载文章,任何人未经原授权方同意,不得复制、转载、摘编等任何方式进行使用,e-works不承担由此而产生的任何法律责任! 如有异议请及时告之,以便进行及时处理。联系方式:editor@e-works.net.cn tel:027-87592219/20/21。
兴趣阅读
相关资料
e-works
官方微信
掌上
信息化
编辑推荐
新闻推荐
博客推荐
视频推荐