【JVM之美】引用类型
无论是通过引用计数算法判断对象的引用数量,还是通过可达性分析算法判断对象是否可达,判断对象是否被回收都与引用有关,
java具有四种强度不同的引用类型
1、强引用
被强引用关联的对象不会被回收,
使用new一个新对象的方式来创建强引用
Object obj = new Object();
2、软引用
被软引用关联的对象只有在内存不够的情况下才会被回收
使用SoftReference类来创建软引用
Object obj = new Object();
SoftReference<Object> sf = new SoftReference<Object>(obj);
obj = null;//是对象只被软引用关联
3、弱引用
被软引用关联的对象一定会被回收,也就就是说它只能存活到下一次垃圾回收发生之前、
使用WeakReference类来实现弱引用
//弱引用
Object obj2 = new Object();
WeakReference<Object> weakReference = new WeakReference<Object>(obj2);
obj2 = null;
4、虚引用
又称为幽灵引用或者幻影引用,一个对象是否有虚引用的存在,完全不会对其生存时间构成影响,也无法通过虚引用获取一个对象
为一个对象设置虚引用关联的唯一目的就是能在这个对象被回收时能收到一个系统通知。
使用PhantomReference来实现虚引用
//虚引用
Object obj3 = new Object();
PhantomReference<Object> phantomReference = new PhantomReference<Object>(obj1);
obj3 = null;