概念
- 内存泄露:Android 为每个应用分配了一定大小的内存,JVM会定时的回收它认为没有用的内存,当代码不规范时会导致一些内存无法被回收占用没存资源,当内存资源不足时一些内存也无法被回收,JVM就会抛出内存泄漏异常
- 内存溢出:Android 为每个应用分配了一定大小的内存,当Android应用new出一个对象时会向系统申请内存,这时如果系统分配给应用的内存不足(内存泄露导致内存无法释放一直占用内存资源)就会抛出内存溢出异常
引用模式
- 强引用:对象只要有引用就不会被回收
Object obj = new Object()
- 软引用:当系统发现快要发生内存溢出时,会回收该类的对象。
可以配合引用队列ReferenceQueue联合使用,如果软引用所引用的对象被回收掉JVM会把该软引用存放到已关联的ReferenceQueue中,等到系统将要抛出OutOfMemoryError的时候就会去回收ReferenceQueue中的软引用(ReferenceQueue回收机制是优先回收不常用的)
new Handler(new SoftReference<>(activity))
- 弱引用:jvm会不定时gc,在下一次GC时会被回收
new Handler(new WeakReference<>(activity))
- 虚引用:引用关系最弱的
new Handler(new PhantomReference<>(activity))