强引用>软引用>弱引用>虚引用 有什么区别,总结一句,就是引用对象重要性,从左到右重要性依次递减。越重要的垃圾回收时,控制越严格。
强引用:
强引用很容易理解,也是我们经常用到的方式
如:使用= 号接受对象
Object a = new A();
其他包括 给集合对象 ,给数组添加元素,set对象成员变量等。
强引用只有在不可达时,才会被垃圾回收器回收,如果内存空间不足,则会OutOfMemoryError
软引用:
就是一个对象在垃圾回收器处理的时候,发现内存不足,就清理对象释放内存。
SoftReference ref = new SoftReference(new A());
弱引用:
只要GC就回收
WeakReference ref = new WeakReference(new A());
虚引用:
虚引用必须和引用队列 (ReferenceQueue)联合使用。当垃圾回收器准备回收一个对象时,如果发现它还有虚引用,就会在回收对象的内存之前,把这个虚引用加入到与之关联的引用队列中。
ReferenceQueue queue = new ReferenceQueue ();
PhantomReference pr = new PhantomReference (object, queue);
可用来跟踪对象被垃圾回收器回收的活动,当一个虚引用关联的对象被垃圾收集器回收之前收到一条系统通知。
在平常的项目中基本不会使用到。