安卓内存溢出是什么(安卓 内存溢出)

一、定义内存溢出: 即为out of memory, 当你要求分配的内存超过了系统给你的内存时, 系统就会抛出out of memory的异常(每个Android能用的内存是有限的)

比如: 当前应用只剩下4M的空间可用, 但你却加载得到一个需要占用5M空间的图片Bitmap对象, 就会抛出溢出的异常

内存泄露: 即为memory leak, 一个对象被创建后, 你不再使用它了, 但因为某种原因它又没有成为垃圾对象, 这块内存不能再被分配置使用.

比如: 查询数据库得到的cursor对象在使用完后没有关闭, Activity中使用Handler发延迟消息, 但退出前不移除未处理的消息

内存泄露不多时没有太大影响, 但积累得多了就会导致应用运动缓慢, 到最后就会内存溢出.二、内存泄漏的分类常发性内存泄漏: 发生内存泄漏的代码会被多次执行到,每次被执行的时候都会导致一块内存泄漏偶发性内存泄漏: 发生内存泄漏的代码只有在某些特定环境或操作过程下才会发生。常发性和偶发性是相对的。对于特定的环境,偶发性的也许就变成了常发性的一次性内存泄漏: 发生内存泄漏的代码只会被执行一次,或者由于算法上的缺陷,导致总会有一块仅且一块内存发生泄漏

说明: 危害性大小顺序为: 1)>2)>3)

三、造成内存泄露的几种场景长生命周期的对象持有短生命周期对象的引用: Activity中使用Handler资源数据连接相关对象不关闭: cusor, stream, connectionHashSet中的对象或HashMap中的Key对象, 其内部与hash值相关的属性被修改一些对象产生后不会自动释放或需要完全执行完了才释放. 比如: Bitmap, Thread, AsyncTask四、避免内存泄露尽早释放无用对象的引用使用字符串处理,避免使用String,应大量使用StringBuffer,每一个String对象都得独立占用内存一块区域尽量少用静态变量,因为静态变量存放在永久代(方法区),永久代基本不参与垃圾回收避免在循环中创建对象五、造成内存溢出的的场景申请了太多的对象. 比如: 使用ListView时, 不复用convertView, 当数据项多时就会出现内存溢出创建的对象内存太大. 比如: 不经过压缩直接加载大图片文件内存泄露积累一定的时间后就可能出现六、避免内存溢出通过复用对象的方式, 减少产生的对象大对象需要先压缩后创建避免或减少内存泄露的情况

java 枚举的定义与用法

Java 的抽象类是什么

java高频面试题-设计模式

java面试题Spring自动装配

Java Web相关技术面试题