参考:https://www.jianshu.com/p/05a83c34a205
概念:
*内存溢出:系统会给每个App分配内存空间也就是heap size值,当app占用的内存加上申请的内存超过了Dalvik
虚拟机的最大内存时就会抛出Out of Memory异常。
*内存泄漏:当一个对象不再使用时,被应该被垃圾回收器回收,但这个对象由于被其它正在使用的对象所持有,
造成无法被回收,造成内存泄漏,内存泄漏最终会导致内存溢出。
关系:内存泄漏是造成内存溢出的主要原因之一。
危害:
*内存溢出:会触发java.lang.OutOfMemoryError,造成程序崩溃。
*内存泄漏:过多的内存泄漏会造成内存溢出或者UI卡顿现象。
内存泄漏的原因:
*大量的图片,音频,视频的不合理处理。
*非静态内部类和匿名内部类Handler,Thread,Runnable等由于持有外部类activity的引用,从而关闭activity时 ,
线程未完成造成内存泄漏。
*资源未及时关闭。(如BroadcastReceiver actiivity关闭时未注销)
*对static关键字的滥用。
*如果使用context尽量使用Application的Context。
*不要使用String进行字符串拼接。
*一些第三方库