当前位置: 首页 > news >正文

Java四种引用类型+ReferenceQueue+WeakHashMap

Summary

JDK1.2以前只提供一种引用类型——强引用:Object obj = new Object(); 。而JDK1.2以后多出的三个选择分别是:

  • 软引用 java.lang.ref.SoftReference;
  • 弱引用 java.lang.ref.WeakReference;
  • 虚引用 java.lang.ref.PhantomReference

强引用

最常用的引用类型,如Object obj = new Object(); 。只要强引用存在则GC时则必定不被回收。

软引用

用于描述还有用但非必须的对象,当堆将发生OOM(Out Of Memory)时则会回收软引用所指向的内存空间,若回收后依然空间不足才会抛出 OOM 。一般用于实现内存敏感的高速缓存。

弱引用

发生GC时必定回收弱引用指向的内存空间。

虚引用

又称为幽灵引用或幻影引用,虚引用既不会影响对象的生命周期,也无法通过虚引用来获取对象实例,仅用于在发生GC时接收一个系统通知。

那么问题来了,若一个对象的引用类型有多个,如何判断它的可达性呢?其实规则如下:

  1. 单条引用链的可达性以最弱的一个引用类型来决定;
  2. 多条引用链的可达性以最强的一个引用类型来决定;

Java%E5%AF%B9%E8%B1%A1%E6%9C%89%E5%A4%9A%E4%B8%AA%E5%BC%95%E7%94%A8%E6%97%B6%E5%88%A4%E6%96%AD%E5%8F%AF%E8%BE%BE%E6%80%A7.png

References

  • Java魔法堂:四种引用类型、ReferenceQueue和WeakHashMap
  • Understanding Weak References Blog

转载于:https://www.cnblogs.com/wondertwo/p/5852992.html

相关文章:

  • 《深入浅出 Java Concurrency》—锁机制(五) 闭锁 (CountDownLatch)
  • 《深入浅出 Java Concurrency》—锁机制(六) CyclicBarrier
  • PHPMySQL 语法
  • 《深入浅出 Java Concurrency》—锁机制(七) 信号量 (Semaphore)
  • jquery easyui datagrid 动态 加载列
  • 《深入浅出 Java Concurrency》—锁机制(八) 读写锁 (ReentrantReadWriteLock) (1)
  • Spring AOP
  • 《深入浅出 Java Concurrency》—锁机制(九) 读写锁 (ReentrantReadWriteLock) (2)
  • 《深入浅出 Java Concurrency》—锁机制(十) 锁的一些其它问题
  • Unix高级编程之文件IO
  • java集合框架学习—ArrayList的实现原理
  • 不等式证明
  • java集合框架学习—HashMap的实现原理
  • PHP 错误 系列:编码格式错误解决
  • java集合框架学习—HashSet的实现原理
  • __proto__ 和 prototype的关系
  • ERLANG 网工修炼笔记 ---- UDP
  • input的行数自动增减
  • Python代码面试必读 - Data Structures and Algorithms in Python
  • Solarized Scheme
  • 闭包--闭包作用之保存(一)
  • 基于 Babel 的 npm 包最小化设置
  • 离散点最小(凸)包围边界查找
  • 买一台 iPhone X,还是创建一家未来的独角兽?
  • 文本多行溢出显示...之最后一行不到行尾的解决
  • 基于django的视频点播网站开发-step3-注册登录功能 ...
  • ​软考-高级-系统架构设计师教程(清华第2版)【第12章 信息系统架构设计理论与实践(P420~465)-思维导图】​
  • #我与Java虚拟机的故事#连载02:“小蓝”陪伴的日日夜夜
  • #我与Java虚拟机的故事#连载03:面试过的百度,滴滴,快手都问了这些问题
  • $jQuery 重写Alert样式方法
  • (1/2)敏捷实践指南 Agile Practice Guide ([美] Project Management institute 著)
  • (react踩过的坑)Antd Select(设置了labelInValue)在FormItem中initialValue的问题
  • (多级缓存)缓存同步
  • (没学懂,待填坑)【动态规划】数位动态规划
  • (十七)devops持续集成开发——使用jenkins流水线pipeline方式发布一个微服务项目
  • (十一)JAVA springboot ssm b2b2c多用户商城系统源码:服务网关Zuul高级篇
  • (提供数据集下载)基于大语言模型LangChain与ChatGLM3-6B本地知识库调优:数据集优化、参数调整、Prompt提示词优化实战
  • (完整代码)R语言中利用SVM-RFE机器学习算法筛选关键因子
  • (学习日记)2024.03.25:UCOSIII第二十二节:系统启动流程详解
  • *p++,*(p++),*++p,(*p)++区别?
  • .Net 8.0 新的变化
  • .NET Core6.0 MVC+layui+SqlSugar 简单增删改查
  • .NET Core引入性能分析引导优化
  • .NET 跨平台图形库 SkiaSharp 基础应用
  • .NET 依赖注入和配置系统
  • .netcore 如何获取系统中所有session_如何把百度推广中获取的线索(基木鱼,电话,百度商桥等)同步到企业微信或者企业CRM等企业营销系统中...
  • .NET连接MongoDB数据库实例教程
  • @Async注解的坑,小心
  • @ConfigurationProperties注解对数据的自动封装
  • @RequestMapping用法详解
  • @select 怎么写存储过程_你知道select语句和update语句分别是怎么执行的吗?
  • []T 还是 []*T, 这是一个问题
  • [I2C]I2C通信协议详解(二) --- I2C时序及规格指引
  • [IE技巧] 如何让IE 启动的时候不加载任何插件
  • [js高手之路] dom常用API【appendChild,insertBefore,removeChild,replaceChild,cloneNode】详解与应用...