Java对象引用四个级别(强、软、弱、虚)

发布时间:2019-11-20 发布网站:脚本宝典
脚本宝典收集整理的这篇文章主要介绍了Java对象引用四个级别(强、软、弱、虚)脚本宝典觉得挺不错的,现在分享给大家,也给大家做个参考。

image

最近,高级Java技栈微信群中,有一些猿友在讨论JVM中对象的周期问题,有谈到引用的级别,现在为大家做个总结吧,虽然大多数公司并没有意识或者用到这些引用,但了解这些基本概念对熟悉整个垃圾回收机制和面试是非常有帮助的。

为了使程序能更加灵活地控制对象的生命周期,从JDK1.2版本开始,JDK把对象的引用级别分为了以下四种

这4种级别由高到低依次为:

  • 强引用(strongReference)

强引用就是我们平常最基本的对象引用,如果是强引用,那回收器不会回收带有强引用的对象。即使内存不足抛出OutOfMemoryError异常也不会回收强引用对象,存在即合理吧。

如:

User user = new User("Java技术栈");

这就是强引用,user持有了这个对象的存储地址的引用。

  • 软引用(SoftReference)

一个对象只有软引用,如果内存空间足够情况下垃圾回收器就不会回收它,如果内存空间不够了就会对这些只有软引用的对象进行回收。只要垃圾回收器没有回收,该软引用对象就可以继续被程序使用。

所以软引用一般用来实现一些内存敏感的缓存,只要内存空间足够,对象就会保持不被回收掉。

  • 弱引用(WeakReference)

弱引用的对象具有更短暂的生命周期,在垃圾回收器线程扫描它所管辖的内存区域的过程中,一旦发现了只具有弱引用的对象,不管当前内存空间足够与否,都会回收它的内存。不过,由于垃圾回收器是一个优先级很低的线程,因此不一定会很快发现那些只具有弱引用的对象。

弱引用可以用来实现一些规范化映射,如WeakHashMap,当key或者value不再被引用时可以自动被回收。

  • 虚引用(PhantomReference)

虚引用顾名思义就是形同虚设,虚引用并不决定对象的生命周期,如果一个对象仅持有虚引用,那么它就和没有任何引用一样,在任何时候都可能被垃圾回收器回收。

虚引用主要用来跟踪对象被垃圾回收器回收的活动,虚引用必须和引用队列(ReferenceQueue)联合使用,当垃圾回收器准备回收一个对象时,如果发现它还有虚引用,就会在回收对象的内存之前,把这个虚引用加入到与之关联的引用队列中。

下面通过一张表格来说明它们的回收时间、用途

引用类型 回收时间 用途
强引用 永不回收 普通对象引用
软引用 内在不足回收 缓存对象
弱引用 垃圾回收时 缓存对象
虚引用 不确定 不确定

不管这些东西平时有没有用到,我们都必须了解这些机制,这对个人的知识面及拓展是非常有帮助的。

推荐阅读

干货:Spring Boot & Cloud 最强技术教程

工具:推荐一款在线创作流程图、思维导图软件

分享Java干货,高并发编程,热门技术教程,微服务及分布式技术,架构设计,区块链技术,人工智能,大数据,Java面试题,以及前沿热门资讯等。
image

脚本宝典总结

以上是脚本宝典为你收集整理的Java对象引用四个级别(强、软、弱、虚)全部内容,希望文章能够帮你解决Java对象引用四个级别(强、软、弱、虚)所遇到的问题。

如果觉得脚本宝典网站内容还不错,欢迎将脚本宝典推荐好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。