4个级别:强引用、软引用、弱引用、虚引用。
1.强引用
建立方式: A a = new A;
A b =a; 用=号直接赋值。
无论如何都不会被系统回收
强引用可能导致内存泄漏。
2.软引用
建立方式: User u = new User();
SoftReference<User> userSoftRef = new SoftReference<>(u);
u=null; 通过SoftReference类建立。
当内存资源紧张时,才会被回收,因此不会引起内存溢出。
可以配合引用队列使用,被回收时加入队列,用于跟踪对象回收情况。
3.弱引用
建立方式: User u = new User();
WeakReference<User> userSoftRef = new WeakReference<>(u);
u=null; 通过WeakReference类建立。
建立方式: User u = new User();
PhantomReference<User> userSoftRef = new PhantomReference<>(u,queue);
u=null; 通过PhantomReference类建立。
系统gc时,只要发现弱引用,就会进行回收。但由于垃圾回收器的线程优先级较低,并不一定能很块的发现持有弱引用的对象,因此弱引用也有可能存活较长时间。
可以配合引用队列使用,被回收时加入队列,用于跟踪对象回收情况。
4.虚引用
几乎和没有引用一样,且必须和引用队列一起用。作用在于跟踪垃圾回收进程。