以下仅个人总结,曾多处引用其他博友文章,加上自己的一些CRUD
强引用
概念:是在对象生命周期内,通过赋值或者对象引用的方式进行关联;强引用的数据不会被jvm回收,就算抛出内存不足也不会被回收。
String a = "123";
String b = new String("456");
以上就是强引用示例
取消强引用:
b = null;
软引用
是用来描述一些有用,但不是必须的对象,只有内存不足的时候jvm会释放这些对象,可以用来做缓存。
软引用使用引用队列ReferenceQueue联合使用
参考:
import java.lang.ref.SoftReference;
public class SoftRef {
public static void main(String[] args){
System.out.println("start");
Obj obj = new Obj();
SoftReference<Obj> sr = new SoftReference<Obj>(obj);
obj = null;
System.out.println(sr.get());
System.out.println("end");
}
}
class Obj{
int[] obj ;
public Obj(){
obj = new int[1000];
}
}
弱引用
也是用来描述非必须的对象,JVM进行垃圾回收的时候,无论内存是否充足,都会将弱引用对象回收;
弱引用与强引用的区别是,弱引用的生命周期更短,只要执行gc就会被回收
虚引用
虚应用和软引用、弱引用不同,它不会印象对象的生命周期。
如果一个对象与虚引用关联,那么和对象没有被引用关联一样,任何时候都可能会被垃圾回收器回收。主要用来跟踪对象被垃圾回收的活动。
虚引用必须和引用队列关联使用
总结
引用类型 | 被回收时间 | 用途 | 生存时间 |
---|---|---|---|
强引用 | 从来不会 | 对象的一般状态 | JVM停止运行时 |
软引用 | 内存不足时 | 对象缓存 | 内存不足时 |
弱引用 | jvm垃圾回收时 | 对象缓存 | gc运行后 |
虚引用 | 未知 | 未知 | 未知 |
参考:
https://blog.csdn.net/qq_39192827/article/details/85611873
虚引用:https://blog.csdn.net/boguesfei/article/details/82838087