java 強引用 軟引用 弱引用

強引用:GC時不會被回收

byte[] bytes = new byte[1024*1024*5];

軟引用:內存不足的時候會被GC回收

//設置-Xmx10m,運行下面的test:

public void testSoftReference() {
byte[] bytes = new byte[1024 * 1024 * 5];

bytes[0] = 1;

//軟引用

SoftReference<byte[]> softRef = new SoftReference<byte[]>(bytes);
bytes = null;

//輸出: 1
if (softRef.get() != null) {
System.out.println(softRef.get()[0]);

}

//此時內存不足,觸發GC, softRef會被回收

byte[] bytes1 = new byte[1024 * 1024 * 5];
bytes1[0] = 1;
if (softRef.get() != null) {
System.out.println(softRef.get()[0]);

} else {

//再從softRef.get()則取不到東西:

System.out.println("doesn't exist");
}
System.out.println(bytes1[0]);
}

弱引用:在進行垃圾回收的時候就會被回收

public void testSimpleWeakReference() {


String abc = new String("abc");
WeakReference<String> abcWeakRef = new WeakReference<String>(abc);
abc = null;
assertEquals("abc", abcWeakRef.get());
System.gc();

//gc之後abcWeakRef 被回收
assertNull(abcWeakRef.get());
}



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章