Java的四种引用方式

网友投稿 224 2022-11-27

Java的四种引用方式

目录1.强引用(StrongReference)2.软引用(SoftReference)3.弱引用(WeakReference)4.虚引用(PhantomReference)5. 引用队列(ReferenceQueue)

1.强引用(StrongReference)

使用最普遍的引用。

只要引用链没有断开,强引用就不会断开。- 当内存空间不足,抛出OutOfMemoryError终止程序也不会回收具有强引用的对象。

通过将对象设置为null来弱化引用,使其被回收

Object object = new Object();

String str = "scc";

//都是强引用

2.软引用(SoftReference)

对象处在有用但非必须的状态

只有当内存空间不足时, GC会回收该引用的对象的内存。

可以用来实现高速缓存(作用)--比如网页缓存、图片缓存

// 注意:wrf这个引用也是强引用,它是指向SoftReference这个对象的,

// 这里的软引用指的是指向newhttp:// String("str")的引用,也就是SoftReference类中T

SoftReference wrf = new SoftReference(new String("str"));

3.弱引用(Weakhttp://Reference)

弱引用就是只要JVM垃圾回收器发现了它,就会将之回收。

非必须的对象,比软引用更弱一-些

GC时会被回

被回收的概率也不大,因为GC线程优先级比较低

适用于引用偶尔被使用且不影响垃圾收集的对象 使用:

Map activeEngineResources = new HashMap<>();

//ResourceWeakReference弱引用

4.虚引用(PhantomReference)

不会决定对象的生命周期

任何时候都可能被垃圾收集器回收

跟踪对象被垃圾收集器回收的活动,起哨兵作用

必须和引用队列ReferenceQueue联合使用

当垃圾回收器准备回收一个对象时,如果发现它还有虚引用,就会把这个虚引用加入到与之 关联的引用队列中。

程序可以通过判断引用队列中是否已经加入了虚引用,来了解被引用的对象是否将要被垃圾回收。如果程序发现某个虚引用已经被加入到引用队列,那么xstTTHeJy就可以在所引用的对象的内存被回收之前采取必要的行动。

Object obj = new Object();

ReferenceQueue queue = new ReferenceQueue();

PhantomReference reference = new PhantomReference(obj, queue);

//强引用对象滞空,保留软引用

obj = null;

5. 引用队列(ReferenceQueue)

无实际存储结构,存储逻辑依赖于内部节点之间的关系来表达

存储关联的且被GC的软引用,弱引用以及虚引用

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:北京与硅谷的创新差异
下一篇:电力载波芯片ST7538及其应用
相关文章

 发表评论

暂时没有评论,来抢沙发吧~