Android内存管理
今天提出了辞职,忽然感觉轻松了许多,写下此篇文章。
Android的整个系统架构分为应用层、应用框架层、类库和运行时以及内核层,应用层和应用框架层是使用java语言进行开发的,而library和runtime则是使用c类的语言进行开发。jvm有自动的垃圾回收机制,所以很多的开发者在使用java语言时并不会过多的去关注内存使用问题。
但是Android开发人员就不得不去关心这个问题了。Android采用沙箱的机制隔离每个应用,每个应用运行在自己独立的环境当中,单个应用的出生和死亡不会影响到其他的应用的运行。再者Android系统默认为每个应用默认分配16M的内存空间,一旦这个内存使用完毕,而内存空间没有得到释放,就会使得Android应用崩溃,出现臭名昭著的OOM异常,所以要聊Android内存管理就必须从OOM开始。
本文将会从OOM、避免内存泄露、代码优化和图片内存管理来讲解。
一、OOM介绍:
Android应用在运行的的时候,系统限制了每个应用运行时可使用的内存大小,可是在Android中不存在swap分区的概念,所以说唯一能够腾出内存的地方只有释放对象的引用。一旦引用不能及时释放,造成内存紧张就可能会导致OOM异常。所以OOM异常可以总结为当应用在heap(Android虚拟机以上的消耗)中所占用的内存达到能够使用的上限时候,虚拟机抛出的异常。如果想增加每个应用使用内存的上限,可以通过在清单文件中加上largeHeap=true,但是这种方式也有一定的上限。
二、内存泄露:
内存泄露指的是申请过的内存空间使用完毕后不再使用,但是这个内存资源却没有得到及时的释放。内存泄露之后我们唯一能做的只能催促虚拟机快点去回收内存,其他的我们是不能干预的。我们能做的只有避免内存泄露。
1、引用和GC
就是说某一块占用内存很大的对象没有得到正确释放,所以就算我们在一个方法运行未结束,之前不使用的对象我们进行的释放掉。
2、Android应用进程策略
3、Activity与Context内存泄露
Intent a = new Intent(this,B.class); startActivity(a);这样B会持有这个context的引用,也会导致A不能及时消亡。
4、Activity与Handler内存泄露
此文暂时写到这里,待会继续!
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。