昨天写的差不多了,忘记发,结果不小心手抖把网页给关了......博客园的用户体验还是差了些呀......
------------------------------------------------------------------
进入正题,OOM,即out of memory,也就是内存耗尽,内存用光的意思,即内存溢出,什么时候会造成OOM报错呢
当JVM因为没有足够的内存来为对象分配空间并且垃圾回收器也已经没有空间可回收时
这里要插句嘴,java中其中一个特性就是他的垃圾回收机制,即当一个对象没有被引用时,他是可以回收的。在我们最开始学java的时候,就被告知这是java的优越性之一,诚然这是没有错的,但是也并不是说java有了这个垃圾回收机制,我们就可以肆意的对内存进行无休止的调用占用,正如《Effective Java》一书中就曾经提到过这个问题,你们认为有了垃圾回收机制就可以解决所有问题了吗,不存在的(当然原话不是这样说的......)
要深入理解OOM,这里就要提到一个概念
内存泄露:申请使用完的内存没有释放,导致虚拟机不能再次使用该内存,此时这段内存就泄露了,因为申请者不用了,而又不能被虚拟机分配给别人用。
更多再往底层深入的知识就不再说了,我自己理解也有限,引一篇博文吧:
关于OOM的那些事儿
道理很简单,内存泄露的多了,就会造成内存溢出
内存溢出方面,申请资源尽量小,分布去做,缓解内存压力基本上就是我们所能做的
我们更多的是让自身尽量少造成内存泄漏的问题
那么android中何时会造成内存泄露呢,依然引一篇博文吧
但是大体上我们可以总结一下,其实说穿了只是要在合适的时候取消引用,又或者说引用的方式要如何调整,就可以尽量去避免这个问题