为什么有多种引用

《深入理解JVM虚拟机》一书中提到了Java中的4种引用,分别是强引用、软引用、弱引用、虚引用,为什么要分这么多种引用呢?这是因为每一种引用的生命周期都不相同,准确的说垃圾收集器对其处理的方式有区别。

引用的分类

1.强引用:比如Object obj = new Object(),创建一个对象obj,这属于强引用,我们平时所说的“引用”,其实就是指“强引用”,只要强引用还存在,垃圾收集器就永远不会回收被引用的对象;

2.软引用(SoftReference):描述一些还有用,但并非必须的对象。对于软引用关联着的对象,在系统将要发生内存溢出之前,将会把这些对象列进回收范围再次进行回收,如果回收完后还没有足够的内存,才会抛出内存溢出异常;

3.弱引用(WeakReference):也是用来描述一些非必需的对象,强度比软引用更弱一些,被弱引用关联的对象只能生存到下一次垃圾收集发生之前。当垃圾收集器工作时,无论当前内存是否足够,都会回收掉只被弱引用关联的对象;比如ThreadLocal中就是用了弱引用:https://www.cnblogs.com/-beyond/p/13125195.html

4.虚引用(PhantomReference):最弱的引用关系,一个对象是否有虚引用的存在,完全不会对其生存时间构成影响,也无法通过虚引用来取得一个对象实例。虚引用的功能是:为一个对象设置虚引用的唯一目的就是能在这个对象被垃圾收集器回收时收到一个系统通知;

java强引用软引用深刻理解_Java-强引用、软引用、弱引用、虚引用相关推荐

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

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

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

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

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

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

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

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

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

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

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

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

  7. 对java面向对象的三大特征的理解_Java面向对象的三大特征是什么?

    面向对象的三大核心特性简介 面向对象开发模式更有利于人们开拓思维,在具体的开发过程中便于程序的划分,方便程序员分工合作,提高开发效率. 该开发模式之所以使程序设计更加完善和强大,主要是因为面向对象具有 ...

  8. java 对象引用 弱引用吗_Java对象的强引用、软引用、弱引用和虚引用 笔记

    从JDK1.2版本开始,把对象的引用分为四种级别,从而使程序能更加灵活的控制对象的生命周期.这四种级别由高到低依次为:强引用.软引用.弱引用和虚引用. 1.强引用 使用最普遍的引用.如果一个对象具有强 ...

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

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

  10. Java 强引用与软引用以及弱引用,虚引用

    1.对象的强.软.弱和虚引用 在JDK 1.2以前的版本中,若一个对象不被任何变量引用,那么程序就无法再使用这个对象.也就是说,只有对象处于可触及(reachable)状态,程序才能使 用它.从JDK ...

最新文章

  1. 这次,让我们捋清:同步、异步、阻塞、非阻塞
  2. Spring xml 配置使用外部config 文件
  3. VNC介绍(第二篇)
  4. Git 远程分支的查看及相关问题
  5. java中位数_java 计算中位数方法
  6. 从入门到精通进阶篇 - 设置负载阶梯式压测场景(详解教程)
  7. 零基础带你学习MySQL—primary key主键(二十三)
  8. [py]py常用模块小结
  9. Qt5.2.1 + VS2010安装错误(Unable to find a Qt build)
  10. linux内核源码分析系列文章汇总
  11. 作业必备:【操作系统实验报告】实验一:熟悉Ubuntu环境(后续会更新~)
  12. CentOS 7安装DB2
  13. SetTimer函数的使用
  14. 怎样给计算机做屏幕保护,电脑屏保软件如何制作屏保 及如何设置屏幕保护
  15. 思科交换机VLAN基本配置
  16. 在Colaboratory中使用ImageAI训练自己的数据集
  17. html弹窗乱码,javascript弹窗是乱码怎么办?
  18. easyexcel 导出数据锁定某个单元格
  19. 【头歌C语言程序与设计】字符数组
  20. python中字符串输出乱码怎么解决_python字符乱码的解决小结

热门文章

  1. angular基本知识学习笔记 - Component的基本概念
  2. SAP CRM note的自动拷贝
  3. SAP CRM 订单抬头文本的可编辑性讨论
  4. 阿里云Java虚拟机的安装位置
  5. SAP UI5 -all controls within the same view will share the same data Model
  6. sap.m.SplitApp
  7. Message popover
  8. one order event handling - event filtering
  9. 伦斯勒理工学院计算机科学本科,【择校解读】伦斯勒理工学院(RPI)院校指南...
  10. ibatis的isequal_isequal ibatis