Java的四种引用类型

相关链接

Java:强引用,软引用,弱引用和虚引用
一次性把Java的四种引用说清楚!

强引用

eg: Object object= new Object();
这种方式就是强引用,强引用在gc root可达的时候都不会被jvm回收,即使抛出OutOfMemoryError。

软引用(适合用来做缓存)

eg:
Object object= new Object();
SoftReference softReference = new SoftReference<>(object);
Object result = softReference.get();

通过SoftReference的get方法来获取对象。软引用,只有在jvm内存不足的情况下会被回收。

弱引用

eg:
Object object= new Object();
WeakReference weakReference= new WeakReference<>(object);
Object result = weakReference.get();

通过WeakReference的get方法来获取对象。在gc的时候就会被回收,不管内存是否充足。

使用场景

如果一个对象是偶尔的使用,并且希望在使用时随时就能获取到,但又不想影响此对象的垃圾收集,那么应该用 Weak Reference 来记住此对象。或者想引用一个对象,但是这个对象有自己的生命周期,你不想介入这个对象的生命周期,这时候就应该用弱引用,这个引用不会在对象的垃圾回收判断中产生任何附加的影响。

虚引用

eg:

Object object= new Object();
ReferenceQueue queue = new ReferenceQueue();
PhantomReference pr = new PhantomReference(object, queue);

虚引用和没有引用是一样的,需要和队列(ReferenceQueue)联合使用。当jvm扫描到虚引用的对象时,会先将此对象放入关联的队列中,因此我们可以通过判断队列中是否存这个对象,来进行回收前的一些处理。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值