JAVA中引用分为 强引用、软引用、弱引用、虚引用四种,强弱依次递减。
1. 强引用便是正常的类对象引用 A a = new A(), 引用存在便无法回收;
2. 软引用,当内存不够的时候才会清除引用关系
@Test
/**
* -ea -Xmx5m -Xms5m 设置内存大小
*/
public void softDemo() {
Object o = new Object();
System.out.println(o);
SoftReference<Object> soft = new SoftReference<>(o);
o = null;
System.gc();
try {
byte[] bytes = new byte[30 * 1024 * 1024];
} catch (Exception e) {
// e.printStackTrace();
} finally {
System.out.println(soft.get());
}
}
3. 弱引用,gc后直接清除
@Test
public void weakDemo() {
ArrayList<WeakReference> list = new ArrayList<>();
for (int i = 0; i < 10; i++) {
byte[] buff = new byte[1024 * 1024];
WeakReference<byte[]> sr = new WeakReference<>(buff);
list.add(sr);
}
System.gc(); //主动通知垃圾回收
for(int i=0; i < list.size(); i++){
Object obj = ((WeakReference) list.get(i)).get();
System.out.println(obj);
}
}
4. 虚引用,基本和没引用一样,随时可能被清除。