温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

java对象的引用有哪些

发布时间:2021-12-01 11:57:35 来源:亿速云 阅读:182 作者:iii 栏目:编程语言

本篇内容介绍了“java对象的引用有哪些”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!

java对象的引用reference分为有强引用,软引用,弱引用,虚引用这几种形式。

1、Soft Reference(软引用)

指到的对象,即使没有任何Direct Reference,也不会清除,一直到jvm内存不足且没有Direct Reference时候才会清除。

应用场景:常用来设计缓存,不但可以将对象缓存起来,也不会容易造成内存不足。

2、Weak Reference(弱引用)

GC一旦发现了弱引用关系进行就开始收集对象。

应用场景:想查看某些对象信息,又不想影响GC对其的收集工作。

与GC的交互:

1.将referent置为null引用;

2.将堆中的目标对象设置为“finalizable(可结束的)”;

3.先执行finalize(),释放内存,软引用添加到RefernceQueue中。

ReferenceQueue在 soft renference和 weak reference中可以为null,但虚应用中必须有!

3、PhantomReference(虚引用)

与GC的交互:

1.不将referent置为null引用;而是将堆中的目标对象设置为“finalizable(可结束的)”;

2.先软引用添加到RefernceQueue中。然后收集对象,释放内存

附注:ReferenceQueue在 soft renference和 weak reference中可以为null,但虚引用中必须有!

4、抽象类Reference分析

java.lang.ref包中有四个类,他们的关系是PhantomReference,WeakReference,SoftReference继承了抽象类Reference。Reference类中,有thread子类(ReferenceHandler),并在静态区域中开启,对pending字段进行实时的监控。

pending是由jvm来赋值的,当Reference内部的referent对象的可达状态改变时,jvm会将Reference对象放入pending链表。

一旦relevent= null,垃圾收集时会标记WeakReference的referent为不可达get()返回null,并且通过赋值给pending ,触发ReferenceHandler线程处理pending。

ReferenceHandler线程要做的是将pending对象enqueue,但默认我们所提供的queue,也就是从构造函数传入的是null,实际是使用了ReferenceQueue.NULL,Handler线程判断queue为ReferenceQueue.NULL则不进行操作,只有非ReferenceQueue.NULL 的queue才会将Reference进行enqueue。

“java对象的引用有哪些”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注亿速云网站,小编将为大家输出更多高质量的实用文章!

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI