1. 在java中, 强引用指 可以通过new 实例创建出来的对象。
2. 软引用:定义一些还有用但并非必须的对象, 对于软引用关联的对象,GC不会直接回收,而是在系统将要内存溢出之前才会触发GC将这些对象进行回收。
弱引用: 同样定义非必须对象。 被弱引用关联的对象在GC执行时会被直接回收。
看一个例子
package com.rd.memory;
import java.lang.ref.SoftReference;
import java.lang.ref.WeakReference;
public class TestReference {
public static void main(String[] args) {
test();
}
private static void test(){
/**
* 软引用
*/
Object softObject = new Object(); // softObject对象是强引用
SoftReference<Object> softReference = new SoftReference<>(softObject);
System.out.println("soft: " + softReference.get());
softObject = null;
System.gc();
System.out.println("soft: " + softReference.get()+"\n\n");
/**
* 弱引用
*/
Object weakObject = new Object(); //weakObject是强引用
WeakReference<Object> weakReference = new WeakReference<>(weakObject);
System.out.println("weak:" + weakReference.get());
weakObject=null;
System.gc();
System.out.println("weak: " + weakReference.get());
}
}
运行代码,结果如下: