说明:文章所有内容均摘自《深入理解Java虚拟机:JVM高级特性与最佳实践(第二版)》


无论是通过引用计数算法判断对象的引用数量,还是通过可达性分析算法判断对象的引用链是否可达,判定对象是否存活都与“引用”有关。

在JDK 1.2以前

Java中的引用的定义很传统:如果reference类型的数据中存储的数值代表的是另外一块内存的起始地址,就称这块内存代表着一个引用。这种定义很纯粹,但是太过狭隘,一个对象在这种定义下只有被引用或者没有被引用两种状态,对于如何描述一些“食之无味,弃之可惜”的对象就显得无能为力。我们希望能描述这样一类对象:当内存空间还足够时,则能保留在内存之中;如果内存空间在进行垃圾收集后还是非常紧张,则可以抛弃这些对象。很多系统的缓存功能都符合这样的应用场景。

在JDK  1.2之后

Java对引用的概念进行了扩充,将引用分为强引用(Strong Reference)、软引用(Soft  Reference)、弱引用(Weak  Reference)、虚引用(Phantom Reference)4种,这4种引用强度依次逐渐减弱。


强引用

就是指在程序代码之中普遍存在的,类似“Object obj=new Object()”这类的引用,只要强引用还存在,垃圾收集器永远不会回收掉被引用的对象。

软引用

是用来描述一些还有用但并非必需的对象。对于软引用关联着的对象,在系统将要发生内存溢出异常之前,将会把这些对象列进回收范围之中进行第二次回收。如果这次回收还没有足够的内存,才会抛出内存溢出异常。在JDK 1.2之后,提供了SoftReference类来实现软引用。

弱引用

也是用来描述非必需对象的,但是它的强度比软引用更弱一些,被弱引用关联的对象只能生存到下一次垃圾收集发生之前。当垃圾收集器工作时,无论当前内存是否足够,都会回收掉只被弱引用关联的对象。在JDK  1.2之后,提供了WeakReference类来实现弱引用。

虚引用

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

【深入Java虚拟机JVM 08】JVM四种引用-强引用、软引用、弱引用、虚引用相关推荐

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

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

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

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

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

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

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

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

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

    目录 强引用 软引用 弱引用 虚引用 强引用 也是我们平时用得最多的, new 一个对象就是强引用,例如 Object obj = new Object(); 当JVM的内存空间不足时,宁愿抛出Out ...

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

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

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

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

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

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

  9. 四种引用类型:强、软、弱、虚

    强引用: package ref; /*** 强引用**/ public class StrongReferenceDemo {public static void main(String[] arg ...

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

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

最新文章

  1. Google服务完整清单
  2. 无法识别的属性 configProtectionProvider的解决方案
  3. Angular Schematics 学习笔记
  4. DOS状态下可以安装Win XP
  5. iframe异步加载_5种延迟加载图像的方法以帮助你提升网站性能与用户体验
  6. Azkaban的介绍、安装与使用
  7. JS switch 分支语句
  8. MONO Jexus部署最佳体验
  9. SuperMap iServer安装过程详解
  10. SQL Drop数据库– MySQL,PostgreSQL,SQL Server
  11. 12.深入分布式缓存:从原理到实践 --- 社交场景架构进化:从数据库到缓存
  12. mfc中CImageList的使用
  13. awr报告 解读_Oracle Awr报告_awr报告解读_基础简要信息
  14. Linux ext4 rm 数据恢复原理(一)-文件系统结构及文件解析
  15. OSPF50个经典问题
  16. 网站渗透测试之常见漏洞排行
  17. 2020科目一考试口诀_2021年科目一考试口诀
  18. 《富人的逻辑》书中的精髓:为什么暴富起来的人会在短期内失去财富,我们又该如何去创造财富和持续拥有财富。
  19. 3-VIV-Android控件之ImageView
  20. appium学习笔记

热门文章

  1. STM8学习笔记---串口uart1
  2. linux设备驱动模型之 kset原理与实例分析
  3. 五种常用的异常值检测方法(均方差、箱形图、DBScan 聚类、孤立森林、Robust Random Cut Forest)
  4. C++ Primer 5th笔记(chap 18 大型程序工具)noexcept
  5. 区块链BaaS云服务(15)复杂美chain33
  6. 区块链预言机(2)预言机概念
  7. 数据科学导论 考试有感 2019 山东大学
  8. 攻防世界Reverse第十二题maze
  9. 全局变量/static静态变量在section段中的分布
  10. [问答]-ARM文档中的†和‡的含义