java对象的4种引用方式详解
解决方法:
1.强引用
例如Object obj = new Object();obj就是强引用,在jvm垃圾回收时通过根搜索算法找不到这个对象时就回收,否则直到当JVM的内存空间不足时,异常导致程序异常终止也不回收强引用的对象。
2.软引用
软引用是通过SoftReference类实现的,生命周期比强引用短。当JVM认为内存空间不足时,就回去试图回收软引用指向的对象,会去清理软引用对象。软引用可以与引用队列(ReferenceQueue)联合使用。
例如:
softReference就是软引用
Object obj = new Object();
SoftReference softReference = new SoftReference(obj);
3.弱引用
它的生命周期比软引用还要短,通过WeakReference类实现的,在GC的时候,不管内存空间足不足都会回收这个对象,同样也可以配合ReferenceQueue 使用,ThreadLocal中的key就用到了弱引用。
例如:weakReference就是弱引用对象
Object obj = new Object();
WeakReference<Object> weakReference = new WeakReference<Object>(obj);
4.虚引用,是通过PhantomReference类实现的。GC回收时都会被回收,是必须配合ReferenceQueue 使用的,虚引用的作用是对象被GC回收后执行这个对象重写的finalize()方法,处理自定义的业务代码而已。
例如:phantomReference就是虚引用
Object obj = new Object();
ReferenceQueue queue = new ReferenceQueue();
PhantomReference<Object> phantomReference = new PhantomReference<Object>(obj , queue);