概念
- 內存泄露:Android 為每個應用分配了一定大小的內存筋遭,JVM會定時的回收它認為沒有用的內存晶密,當代碼不規(guī)范時會導致一些內存無法被回收占用沒存資源始衅,當內存資源不足時一些內存也無法被回收摇庙,JVM就會拋出內存泄漏異常
- 內存溢出:Android 為每個應用分配了一定大小的內存勋锤,當Android應用new出一個對象時會向系統(tǒng)申請內存粱侣,這時如果系統(tǒng)分配給應用的內存不足(內存泄露導致內存無法釋放一直占用內存資源)就會拋出內存溢出異常
引用模式
- 強引用:對象只要有引用就不會被回收
Object obj = new Object()
- 軟引用:當系統(tǒng)發(fā)現(xiàn)快要發(fā)生內存溢出時羊壹,會回收該類的對象。
可以配合引用隊列ReferenceQueue聯(lián)合使用齐婴,如果軟引用所引用的對象被回收掉JVM會把該軟引用存放到已關聯(lián)的ReferenceQueue中油猫,等到系統(tǒng)將要拋出OutOfMemoryError的時候就會去回收ReferenceQueue中的軟引用(ReferenceQueue回收機制是優(yōu)先回收不常用的)
new Handler(new SoftReference<>(activity))
- 弱引用:jvm會不定時gc,在下一次GC時會被回收
new Handler(new WeakReference<>(activity))
- 虛引用:引用關系最弱的
new Handler(new PhantomReference<>(activity))