内存溢出(out of memory)和内存泄露(memory leak),在这里我想写出一些开发中相关的经验,与大家一同分享、探讨、进步!

 

 

*****个人经验狭隘,难免有所疏漏,若有问题,恳请斧正!*****

 

【-正题-】

1.什么是内存溢出(out of memory)和内存泄露(memory leak)?

内存溢出:是指当程序向系统申请内存时,系统没有足够的内存空间供其使用。例如,系统规定最多只能给应用16MB内存,而应用却申请了17MB,这样就会导致内存溢出。

内存泄露:是指程序系统申请内存后,而又不再使用,同时又无法释放已申请的内存空间。或者说,对象不再需要使用后,仍在内存中被持有引用,无意义的占用内存空间。少量的内存泄露无碍,但如果不断的累积的话,超过系统上限值,最终就会导致内存溢出。

注:一般情况下,用户使用应用是根本感觉不到内存泄露的问题的(不会报错),而当内存泄露多次发生,无意义的内存占用不断的累积,无法消除,超过系统给出的内存限制值,就会导致内存溢出,程序崩溃。也就是常常见到用户说的一句话“刚才还用着好好的,运行了好一会儿都没事,怎么突然就崩溃了呢?”。

 

2.粗谈内存回收机制(Garbage Collection)

        说到内存问题,就不得不说Android虚拟机Dalvik的内存回收机制,也就是通常所说的GC。安卓虚拟机(DVM)和Java虚拟机(JVM)有很多相似之处,这里要说的就是内存回收机制(GC)。垃圾回收器会去回收那些在内存中不再具有引用的内存,引用又有强(默认)、软(SoftReference)、弱(WeakReference)、虚(PhantomReference)之分,回收优先次序是虚->弱->软,强引用是不会被回收的(造成内存泄露的原因)。(不过,从Android2.3(API 9)开始,垃圾回收器更倾向于回收软引用和弱引用,这就使得以前采用软引用和弱引用来优化内存的方式变得不再可靠 。谷歌推荐使用LruCache来进行内存缓存优化,在后面将讲到。)

        另外,值得一提的是,运行环境中相对于JVM很大的一个区别在于:Android会为每个应用程序单独开启一个DVM,这样即便其中一个虚拟机关闭或意外中止,也不会对其他虚拟机造成影响,可以最大程度的保护应用的安全和独立运行。

 

 

 

3.下面是我整理的内容大纲

 

android native 运行完后 如何释放内存_移动开发

        内容主要分为“一般情况”和“典型情况”两部分,“一般情况”主要讲述一些开发中的对于一系列琐碎的内存泄露与优化的问题总结,“典型情况”主要举出开发中一个常见的易发生内存溢出的例子,进行说明。里面定然有你已了然于心的问题,也可能有你平时忽略的问题。闲话不多说,下一篇正式开始!

 

 

4.内容地址超链接

 

 

Android内存溢出与优化(一)——不要随意new对象

Android内存溢出与优化(二)——不做无意义的内存消耗

Android内存溢出与优化(三)——使用完后要close、recycle、unregister、null、stop

Android内存溢出与优化(四)——防止Handler导致的内存泄露

 

-----阅览中,如若遇到内容中的不足之处,恳请大家指出!-----