引用的四種類型_軟引用
阿新 • • 發佈:2021-01-31
技術標籤:JVM
引用的四種類型_軟引用
package src.main.java.com.qqjx.thread;
/**
* 軟引用
* 軟引用是用來描述一些還有用但並非必須的物件。
* 對於軟引用關聯著的物件,在系統將要發生記憶體溢位異常之前,將會把這些物件列進回收範圍進行第二次回收。
* 如果這次回收還沒有足夠的記憶體,才會丟擲記憶體溢位異常。
* -Xmx20M
*/
import java.lang.ref.SoftReference;
public class T02_SoftReference {
public static void main(String[] args) {
//idea 配置最大最小堆大小為20MB
SoftReference<byte[]> m = new SoftReference<>(new byte[1024*1024*10]);
//m = null;
//第一次能正常 獲取
System.out.println(m.get());
//第一次不能正常回收
System.gc();
try {
Thread.sleep(500);
} catch (InterruptedException e) {
e.printStackTrace();
}
// 第二次能正常獲取
System.out.println(m.get());
//再分配一個數組,heap將裝不下,這時候系統會垃圾回收,先回收一次,如果不夠,會把軟引用幹掉
byte[] b = new byte[1024*1024*15];
System.out.println(m.get());
}
}
//軟引用非常適合快取使用
[ B@1b6d3586
[B@1b6d3586
Exception in thread "main" java.lang.OutOfMemoryError: Java heap space
at src.main.java.com.qqjx.thread.T02_SoftReference.main(T02_SoftReference.java:36)