一、硬引用
一般的引用都是硬引用,比如下面的例子,new Object()被object和obj硬引用,这就是硬引用,垃圾回收后被硬引用的对象不会被删除:
public class Main {
public static void main(String[] args) {
Object object=new Object();
Object obj=object;
}
}
二、软引用
软引用的对象是SoftReference,用法如下,则new Object()就被softReference软引用了,软引用的特点是:当内充充足时,被软引用的对象不会被垃圾回收;当内存不足的时候,被软引用的对象会被垃圾回收。下面的例子为内充充足时不会被回收:
public class Main {
public static void main(String[] args) {
SoftReference<Object> softReference=new SoftReference<>(new Object());
System.gc();
System.out.println(softReference.get());
}
}
运行结果:
java.lang.Object@154617c
三、弱引用
弱引用对象是WeakReference,用法和软引用相同,weakReference为对象new Object()的弱引用,弱引用的特点是:不论内充是否充足,弱引用对象都会被垃圾回收。下面则是这样的例子:
public class Main {
public static void main(String[] args) {
WeakReference<Object> weakReference=new WeakReference<>(new Object());
System.gc();
System.out.println(weakReference.get());
}
}
运行结果:
null
需要注意的一点是常量池不会被垃圾回收:
public class Main {
public static void main(String[] args) {
WeakReference<Object> weakReference=new WeakReference<>("Love");
System.gc();
System.out.println(weakReference.get());
}
}
Love