Android記憶體優化—Java的引用方式
阿新 • • 發佈:2018-12-24
四種引用方式
1、強引用(StrongReference)
2、軟引用(SoftReference)
3、弱引用(WeakReference)
4、虛引用(PhantomReference)
強引用(StrongReference)
1、只要某個物件有強引用與之關聯,JVM必定不會回收這個物件
2、即使記憶體不足,JVM寧願丟擲OutOfMemory錯誤也不會回收這種物件
例:
Object object = new Object();
String str = "hello";
軟引用(SoftReference)
1、用來描述一些有用但並不是必需的物件
2、對於軟引用關聯著的物件,只有在記憶體不足的時候JVM才會回收該物件
3、很適合用來實現快取:比如網頁快取、圖片快取等
例如:
SoftReference aSoftRef = new SoftReference(aRef);
弱引用(WeakReference)
1、弱引用是用來描述非必需物件的
2、當JVM進行垃圾回收時,無論記憶體是否充足,都會回收被弱引用關聯的物件。
例如:
WeakReference<People> reference = new WeakReference<People>(new People());
虛引用(PhantomReference)
1、不影響物件的生命週期
2、如果一個物件與虛引用關聯,則跟沒有引用與之關聯一樣
3、在任何時候都可能被垃圾回收器回收
例如:
ReferenceQueue<String> queue = new ReferenceQueue<String>();
PhantomReference<String> pr = new PhantomReference<String>(new String("hello"), queue);
物件的可達程度
強可達:無需引用直接可達
軟可達:通過一個軟引用可達
弱可達:通過一個弱引用可達
虛可達:通過一個虛引用可達
不可達:沒有任何引用指向物件