四种引用类型

JDK1.2 之前,一个对象只有“已被引用”和"未被引用"两种状态,这将无法描述某些特殊情况下的对象,比如,当内存充足时需要保留,而内存紧张时才需要被抛弃的一类对象。

所以在 JDK.1.2 之后,Java 对引用的概念进行了扩充,将引用分为了:强引用(Strong Reference)、软引用(Soft Reference)、弱引用(Weak Reference)、虚引用(Phantom Reference)4 种,这 4 种引用的强度依次减弱。

一,强引用

Object obj = new Object(); //只要obj还指向Object对象,Object对象就不会被回收 obj = null; //手动置null

只要强引用存在,垃圾回收器将永远不会回收被引用的对象,哪怕内存不足时,JVM也会直接抛出OutOfMemoryError,不会去回收。如果想中断强引用与对象之间的联系,可以显示的将强引用赋值为null,这样一来,JVM就可以适时的回收对象了

二,软引用

软引用是用来描述一些非必需但仍有用的对象。在内存足够的时候,软引用对象不会被回收,只有在内存不足时,系统则会回收软引用对象,如果回收了软引用对象之后仍然没有足够的内存,才会抛出内存溢出异常。这种特性常常被用来实现缓存技术,比如网页缓存,图片缓存等。

在 JDK1.2 之后,用java.lang.ref.SoftReference类来表示软引用。

三,弱引用

弱引用的引用强度比软引用要更弱一些,无论内存是否足够,只要 JVM 开始进行垃圾回收,那些被弱引用关联的对象都会被回收。在 JDK1.2 之后,用 java.lang.ref.WeakReference 来表示弱引用。

四,虚引用

虚引用是最弱的一种引用关系,如果一个对象仅持有虚引用,那么它就和没有任何引用一样,它随时可能会被回收,在 JDK1.2 之后,用 PhantomReference 类来表示,通过查看这个类的源码,发现它只有一个构造函数和一个 get() 方法,而且它的 get() 方法仅仅是返回一个null,也就是说将永远无法通过虚引用来获取对象,虚引用必须要和 ReferenceQueue 引用队列一起使用。

四种引用类型(强引用、软引用、弱引用、虚引用)的简单介绍相关推荐

  1. java中四种引用类型(对象的强、软、弱和虚引用)

    2019独角兽企业重金招聘Python工程师标准>>> 对象的强.软.弱和虚引用在JDK 1.2以前的版本中,若一个对象不被任何变量引用,那么程序就无法再使用这个对象.也就是说,只有 ...

  2. 软引用和弱引用的区别_强、软、弱、虚引用的区别和使用

    原文阅读: 强.软.弱.虚引用的区别和使用​mp.weixin.qq.com Java提供了四种级别的应用类型:强引用.软引用.弱引用及虚引用.那么这四种引用类型有什么区别呢? 首先我们通过一张图来看 ...

  3. 对象的强、软、弱和虚引用

    本文介绍对象的强.软.弱和虚引用的概念.应用及其在UML中的表示. 1.对象的强.软.弱和虚引用 在JDK 1.2以前的版本中,若一个对象不被任何变量引用,那么程序就无法再使用这个对象.也就是说,只有 ...

  4. Java:对象的强、软、弱和虚引用

    见:http://zhangjunhd.blog.51cto.com/113473/53092 maven/Java/web/bootstrap/dataTable/app开发QQ群:56686262 ...

  5. jvm系列 (四) ---强、软、弱、虚引用

    java引用 目录 jvm系列(一):jvm内存区域与溢出 jvm系列(二):垃圾收集器与内存分配策略 jvm系列(三):锁的优化 我的博客目录 为什么将引用分为不同的强度 因为我们需要实现这样一种情 ...

  6. java-基础-强、软、弱、虚引用

    Java的四种引用,强弱软虚,用到的场景. JDK1.2之前只有强引用,其他几种引用都是在JDK1.2之后引入的. 强引用(Strong Reference) 最常用的引用类型,如Object obj ...

  7. JVM 学习(2)—简单理解Java 四大引用(强、软、弱、虚)

    一.Java 引用概述 Java 中出现四种引用是为了更加灵活地管理对象的生命周期,以便在不同场景下灵活地处理对象的回收问题.不同类型的引用在垃圾回收时的处理方式不同,可以用来实现不同的垃圾回收策略. ...

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

    转载自 Java对象引用四个级别(强.软.弱.虚) 最近,高级Java技术栈微信群中,有一些猿友在讨论JVM中对象的周期问题,有谈到引用的级别,现在为大家做个总结吧,虽然大多数公司并没有意识或者用到这 ...

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

    文章目录 1.概述 强引用(StrongReference) 软引用(SoftReference) 弱引用(WeakReference) 虚引用(PhantomReference) 2. 扩展阅读 1 ...

  10. Java 的四大引用(强、软、弱、虚)

    在 jdk1.2 以后,Java 对于引用的概念进行了扩充,将引用分为强引用(Strong Reference).软引用(Soft Reference).弱引用(Weak Reference).虚引用 ...

最新文章

  1. 使用合成数据集来做目标检测:目标检测的介绍
  2. 2022年值得关注的8个人工智能趋势
  3. THinkPHP 5.0 域名路由
  4. JavaScript 图片的上传前预览(兼容所有浏览器)
  5. C/C++求一个整数的二进制中1的个数(用三种效率不同的方法实现)
  6. 想提高用户访问的响应速度和成功率还不赶快学习CDN
  7. 译文 | 与TensorFlow的第一次接触 第五章:多层神经网络
  8. 利用CNN进行面部表情识别
  9. delphi 远程mysql_Delphi远程连接Mysql的实现方法
  10. 共享计算机如何建快捷方式,创建快捷方式的几种方法
  11. IDEA默认KeyMap映射快捷键
  12. JAVA正则表达式校验中国大陆手机号段【2022年2月】
  13. usrp n310测试总结---测试结果篇(不仅仅是测试结果,还有方法哦)
  14. matlab 绘制扇形区域
  15. 穷爸爸 富爸爸(Rich dad , Poor dad ) 读书笔记(第一课lesson 1)
  16. 苹果safari浏览器怎么样(好不好用)
  17. 什么是HTTP/2?HTTP/2和HTTP/1.1区别是什么?
  18. 互联网日报 | 携程实现疫情以来首季度盈利;360安全浏览器辟谣收费传闻;滴滴再推123全民拼车日...
  19. 源码到底应该怎么读?
  20. 【题解】CF808G Anthem of Berland

热门文章

  1. Django---模版层
  2. 经验与教训:测试员的偏向
  3. RabbitMQ Tutorials 3 - Publish/Subscribe 发布/订阅
  4. js与C#服务端 json数据交互
  5. 2017.5.3 博客园自动生成章节目录
  6. ASP.NET-EF基础知识
  7. 博士导师总结目标检测、卷积神经网络和OpenCV学习资料(教程/PPT/代码)
  8. CVPR2021 | 最新CVPR2021论文抢先看,附全部下载链接!
  9. NeurIPS | 17篇论文带你展望图机器学习发展趋势
  10. C++编程题积累——for循环判断条件陷阱