Java对象的引用有4种:
强引用、软引用、弱引用、虚引用
1、强引用
我们通常使用的如:
User user = new User();
被强引用所引用的java对象,绝对不会被垃圾回收机制回收,即使系统内存非常紧张,JVM也不会回收被强引用所引用的Java对象
2、软引用SoftReference
如果内存足够,软引用和强引用没多大差别,当内存告急时,GC会回收掉软引用引用的对象
User user = new User();
SoftReference<User> userSoft = new SoftReference<User>(user);
3、弱引用WeakReference
弱引用所引用的生命周期比软引用的短,当垃圾回收机制运行时,不管内存是否充足,将会回收弱引用所引用的对象
User user = new User();
WeakReference<User> userWeak = new WeakReference<User>(user);
4、虚引用PhantomReference
主要用来跟踪对象被垃圾回收的状态,虚引用不能单独使用
// 虚引用
User user2 = new User("leo", 12);
// 创建一个引用队列
ReferenceQueue<User> rQueue = new ReferenceQueue<>();
// 创建一个虚引用
PhantomReference<User> pReference = new PhantomReference<User>(user2,
rQueue);
//切断user2引用之间的联系
user2 = null;
System.out.println(pReference.get());
返回结果:null
5、总结
如果要使用这些特殊的引用类,就不能保留对象的强引用!!!