强引用,软引用,弱引用和虚引用的说明

概述

从 JDK1.2 版本开始,把对象的引用分为四种级别,从而使程序能更加灵活的控制对象的生命周期。这四种级别由高到低依次为:强引用→软引用→弱引用→虚引用。

具体说明

强引用(StrongReference)

强引用是使用最普遍的引用。如果一个对象具有强引用,垃圾回收器绝不会回收它。当内存空间不足,Java虚拟机宁愿抛出 OutOfMemoryError 错误,使程序异常终止,也不会靠随意回收具有强引用的对象来解决内存不足问题。

软引用(SoftReference)

软引用是用来描述有用但并非必需的对象。一个对象只具有软引用,如果内存空间足够,垃圾回收器就不会回收它,如果内存空间不足,就会回收这些对象的内存。只要垃圾回收器没有回收它,该对象就可以被程序使用。软引用可用来实现内存敏感的高速缓存。

弱引用(WeakReference)

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

虚引用(PhantomReference)

虚引用也称为幽灵引用或者幻影引用,它是最弱的一种引用关系。一个对象是否有虚引用的存在,完全不会对其生存时间构成影响,也无法通过虚引用来取得一个对象实例。为一个对象设置虚引用关联的唯一目的就是能在这个对象被收集器回收时收到一个系统通知。在 JDK 1.2 之后,提供了PhantomReference类来实现虚引用。

强引用,软引用,弱引用和虚引用的说明相关推荐

  1. 对象的软、弱、和虚引用

    ---恢复内容开始--- java中,一个对象会一个引用变量引用该对像,这个是最常见的引用方式.以此同时,java.lang.ref包下提供了3个类,SoftReference.PhantomRefe ...

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

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

  3. java弱引用弱点_终于有人把Java强、软、弱、虚四种引用知识点整理出来了

    强引用就是指在程序代码之中普遍存在的,指创建一个对象并把这个对象赋给一个引用变量,并没有像其它三种引用一样有一个就具体的类来描述.对于强引用对象,即使内存不足,JVM宁愿抛出OutOfMemoryEr ...

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

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

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

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

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

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

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

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

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

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

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

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

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

    一.什么是引用 首先要明白什么是一个引用呢?Object o = new Object()这就是一个引用了,一个变量指向new出来的对象,这个变量就叫一个引用,引用这个东西,在java里面分4种,普通 ...

最新文章

  1. 缓存技术比拼:Redis与Memcached的同与不同
  2. 双轴机械臂串口控制命令开发与测试:STM32F103控制板,简易调试命令集合
  3. 055——VUE中vue-router之路由参数的随意设置与伪静态链接地址处理:
  4. mybatis高级(3)_延迟加载_深度延迟_一级缓存_二级缓存
  5. android 默认开关,android默认设置的开关
  6. ofdm原理_什么是IQ调制,了解I/Q调制的基本原理及其主要特征 - 射频技术第2部分...
  7. jdbctemplate 开启事务_Spring(四):事务管理
  8. 酷享CMS企业级授权系统源码 有工单系统
  9. React Router学习
  10. c#范型编程系列一(非原创)
  11. 《STK二次开发 C++版》S1:STK介绍
  12. html打开页面时在img标签加域名,Html中的img标签 加载失败
  13. PHP程序员战地日记
  14. 达观数据爱心公益再出发,走进广西桥业小学开展捐书助学活动
  15. 10款最著名的代码(文本)编辑器
  16. Unity3D如何快速入门
  17. 系统学习机器学习之特征工程(三)--多重共线性
  18. android闪光灯
  19. ArcGIS中添加谷歌地图、天地图、高德地图、Bing...在线地图(附插件下载)
  20. android系统库

热门文章

  1. 简单介绍oracle执行计划,Oracle性能优化之oracle中常见的执行计划及其简单解释
  2. vmware下windows磁盘分区扩容
  3. 英语单词分类(待补充)
  4. 车万翔:ChatGPT只是“搬运工”而不是“创造者”,但NLP学术界确实非常危急!...
  5. 第六讲 典型相关性分析
  6. error:1962 no operating system found
  7. 两复数乘积C语言,C语言程序(两复数矩阵相乘)改错求助
  8. oracle数字转换8进制,电脑数字转换
  9. PreparedStatement,分页查询
  10. 简单说明拆计算机的流程,cpu风扇怎么拆详细步骤