java中四种引用类型

2023-11-04

在JDK 1.2以前的版本中,若一个对象不被任何变量引用,那么程序就无法再使用这个对象。也就是说,只有对象处于可触及(reachable)状态,程序才能使用它。从JDK 1.2版本开始,把对象的引用分为4种级别,从而使程序能更加灵活地控制对象的生命周期。这4种级别由高到低依次为:强引用、软引用、弱引用和虚引用。

⑴强引用(StrongReference)

强引用是使用最普遍的引用。如果一个对象具有强引用,那垃圾回收器绝不会回收它。当内存空间不足,Java虚拟机宁愿抛出OutOfMemoryError错误,使程序异常终止,也不会靠随意回收具有强引用的对象来解决内存不足的问题。 ps:强引用其实也就是我们平时A a = new A()这个意思。

⑵软引用(SoftReference)

如果一个对象只具有软引用,则内存空间足够,垃圾回收器就不会回收它;如果内存空间不足了,就会回收这些对象的内存。只要垃圾回收器没有回收它,该对象就可以被程序使用。软引用可用来实现内存敏感的高速缓存(下文给出示例)。
软引用可以和一个引用队列(ReferenceQueue)联合使用,如果软引用所引用的对象被垃圾回收器回收,Java虚拟机就会把这个软引用加入到与之关联的引用队列中。

⑶弱引用(WeakReference)

弱引用与软引用的区别在于:只具有弱引用的对象拥有更短暂的生命周期。在垃圾回收器线程扫描它所管辖的内存区域的过程中,一旦发现了只具有弱引用的对象,不管当前内存空间足够与否,都会回收它的内存。不过,由于垃圾回收器是一个优先级很低的线程,因此不一定会很快发现那些只具有弱引用的对象。
弱引用可以和一个引用队列(ReferenceQueue)联合使用,如果弱引用所引用的对象被垃圾回收,Java虚拟机就会把这个弱引用加入到与之关联的引用队列中。

⑷虚引用(PhantomReference)

“虚引用”顾名思义,就是形同虚设,与其他几种引用都不同,虚引用并不会决定对象的生命周期。如果一个对象仅持有虚引用,那么它就和没有任何引用一样,在任何时候都可能被垃圾回收器回收。
虚引用主要用来跟踪对象被垃圾回收器回收的活动。虚引用与软引用和弱引用的一个区别在于:虚引用必须和引用队列 (ReferenceQueue)联合使用。当垃圾回收器准备回收一个对象时,如果发现它还有虚引用,就会在回收对象的内存之前,把这个虚引用加入到与之 关联的引用队列中。

ReferenceQueue queue = new ReferenceQueue ();
PhantomReference pr = new PhantomReference (object, queue); 

程序可以通过判断引用队列中是否已经加入了虚引用,来了解被引用的对象是否将要被垃圾回收。如果程序发现某个虚引用已经被加入到引用队列,那么就可以在所引用的对象的内存被回收之前采取必要的行动。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

java中四种引用类型 的相关文章

  • 泰勒公式的展开细节解析(转载)

    转载自 https blog csdn net dog250 article details 76697167 上周写完了 三体 读后思考 泰勒展开 维度打击 黑暗森林 后收到一些邮件 进一步思考了关于泰勒展开的意义 也许我掌握的那些网络技
  • [4G&5G专题-5]:RRU 全面了解什么是4G+5G RF动态频谱共享?

    前言 建议在了解动态频谱DSS之前 前先了解 5G专题 4 RRU 全面了解什么是4G 5G RF静态射频共享 4G 5G专题 4 RRU 全面了解什么是4G 5G RF静态射频共享 文火冰糖的硅基工坊的博客 CSDN博客 rru设计原理与
  • 安卓在ecplise的问题

    Description Resource Path Location Type AndroidManifest xml file missing This is build issue Go to Menu in eclipse Proje
  • 【编程测试题】头条校招

    题目描述 头条的2017校招开始了 为了这次校招 我们组织了一个规模宏大的出题团队 每个出题人都出了一些有趣的题目 而我们现在想把这些题目组合成若干场考试出来 在选题之前 我们对题目进行了盲审 并定出了每道题的难度系统 一场考试包含3道开放
  • 用python实现简易控制台五子棋小游戏

    finish False 游戏是否结束 flagNum 1 当前下棋者标记 flagch 当前下棋者棋子 x 0 当前棋子的横坐标 y 0 当前棋子的纵坐标 print 033 1 37 41m 简易五子棋游戏 控制台版 033 0m 棋盘
  • python生成器的实现及原理

    1 迭代 一个接一个读取列表中的值 这个过程叫迭代 案例 mylist1 1 2 3 for v in mylist1 print v end print mylist2 x x for x in range 5 for v in myli
  • STM32F103(六)——定时器中断

    定时器原理与例程 1 定时器基本原理 1 1 三种定时器的区别 1 2 通用定时器的主要特点 1 3 通用定时器的3种计数器模式 1 4 通用定时器工作过程 1 5 定时器的内部时钟配置 2 定时器中断实验 2 1 常见库函数 2 2 定时
  • Notepad++正则命令全解 -- 小黑超细详解

    notepad 为文本编辑器工具 是windows的一款免费开源工具 功能有很多吧 还可以运行脚本 倒是也没有具体去研究 不过用起来挺方便的 记录一下平常使用会用到的吧 下载 Notepad GitHub 目录 举一个栗子 简单使用正则 正
  • Qt中多个单选按钮信号连接到同一个槽函数

    当多个类似信号需要连接到同一个槽函数时 在槽函数内需要对信号的来源进行判断 这里主要是采用sender 函数 此函数会返回信号来源的方向 让我们来看看效果 接下来是具体的代码 首先添加3个RadioButton 并且连接到同一个槽函数 QS
  • 软件工程——第13章软件项目管理知识点整理(完结)

    本专栏是博主个人笔记 主要目的是利用碎片化的时间来记忆软工知识点 特此声明 文章目录 1 管理的定义 2 软件项目管理地位 重要性
  • 【自学开发之旅】Flask-restful-Jinjia页面编写template-回顾(五)

    restful是web编程里重要的概念 一种接口规范也是一种接口设计风格 设计接口 要考虑 数据返回 接收数据的方式 url 方法 统一风格 rest 表现层状态转移 web 每一类数据 资源 资源通过http的动作来实现状态转移 GET
  • iframe 相互获取值

    链接 https www cnblogs com henuyuxiang p 7427155 html
  • Hp 笔记本开机不进入 grub 引导 ubuntu与windows选择界面

    我在预装了 windows 的机器上安装 ubuntu 每次想启动 ubuntu 时都需要按下 F9 才能进入引导选择界面 使用 ubuntu 的 efibootmgr 和 boot repair 等工具都不起作用 只是改变了 ubuntu
  • git常规操作

    场景一 从项目A的dev分支复制到项目B的dev分支上 1 将项目B clone 到本地 git clone b master 项目B的git地址 2 将项目A的git地址 添加至本地的remote git remote add upstr
  • 每月摘录--2023年7月

    企业 证监会最新消息 对蚂蚁集团及旗下机构处以罚款 含没收违法所得 71 23 亿元 并要求蚂蚁集团关停违规开展的 相互宝 业务 并依法补偿消费者利益 极客公园 7 月 7 日消息 据央行公布的行政处罚信息显示 今日 财付通支付科技有限公司
  • CoordinatorLayout的简单使用,android开发app的详细过程

    效果展示 代码展示
  • 军工重组

    http bar stockstar com p8448439 1 html 下周可千万别洗出来 2660到现在用了没多久就临近3000点 只要地产一起来马上就到3600了 地产现在不涨并不是不想涨 而是只要地产一起来马上就到3600 多数
  • VSCode安装教程最新,包教包会!

    一 VScode下载 1 进入VScode官网 官网地址 https code visualstudio com 点击 Download 进入下载 不要点击 Download for Windows Stable Build 否则它会自动帮
  • 编译Linux内核生成Image和System.map文件

    p span style font family 华文楷体 font size 12pt background color rgb 255 255 255 一直想琢磨琢磨Linux内核 便开始看 Linux内核完全注释 可是发现一头雾水 所
  • 用java实现计算器四则运算以及混合运算

    贴代码 本例测试是基于junit eclipse可安装对应 的java包 我用的是idea 添加插件即可 import java io BufferedReader import java io IOException import jav

随机推荐

  • eclipse 配置 C++

    前言 最近有项目需要c 但是c 自从离校那时就没碰过了 所以要重新学习下 因为曾经为了做自己的博客网站 学了java 下载了eclipse 也是在eclipse上写的博客网站的 所以对eclipse还是相对熟悉的 而且平时写代码都是用vim
  • android手势识别opencv,较为成熟的安卓项目--人面识别,手势识别向

    一 人脸识别 1 目标检测 目标追踪 人脸检测 人脸识别 效果 2 Android下使用OpenCV实现人脸检测 效果 3 人脸标识 效果 4 人脸检测 github https github com VernonVan Face 效果 主
  • Jmeter 中随机函数__Random 的使用

    前段时间 在做接口测试时 经常遇到接口参数需要输入不同的内容或者手机号码等 不允许输入重复的参数内容 比如不同的手机号码 那此时可以通过Random 随机函数来解决此问题 以前的文章有介绍过使用time函数来实现 详见 http blog
  • RuntimeError: Error(s) in loading state_dict for Net(让人心累的错误)

    RuntimeError Error s in loading state dict for Net size mismatch for classifier 4 weight xxxxxx 后面一堆错误 这个是model py 千万千万别
  • 【DL】第 6 章:语言建模

    大家好 我是Sonhhxg 柒 希望你看完之后 能对你有所帮助 不足请指正 共同学习交流 个人主页 Sonhhxg 柒的博客 CSDN博客 欢迎各位 点赞 收藏 留言 系列专栏 机器学习 ML 自然语言处理 NLP 深度学习 DL fore
  • 小程序跳转:云开发之h5跳小程序

    目录 前言 前提条件 注意 实现步骤 更多前端知识 前言 此方案是我在实际开发中的全部过程 因为我也是第一次做小程序的云开发 一开始根据这个文档就遇到了一些坑 所以在这里我做了更详细的步骤分解 非个人主体并且已认证的 微信认证 小程序 使用
  • tictoc例子理解10-12

    tictoc10 12 tictoc 10 几个模块连接 发送消息直到模块3收到消息 tictoc 11 新增信道定义 tictoc 12 双向连接信息简化定义 tictoc 10 几个模块连接 发送消息直到模块3收到消息 让我们用几个 n
  • 【机器学习】 Matlab 实现多种分类器(感知机、KNN、Logistic、最大熵、决策树、朴素贝叶斯)的二分类

    写在之前 这是本人的统计学习方法作业之一 老师要求一定要用Matlab编程 本人在此之前未曾大量使用Matlab 因此某些算法可能因为不知道函数或者包而走了弯路 代码高亮查了一下 没找到Matlab的所以用了C的 部分算法参考了某些算法的p
  • github中fork分支和pullrequest的最佳实践

    github中fork分支和pullrequest的最佳实践 github中fork分支和pullrequest的最佳实践 最近在参与一个国外的github开源项目 遇到自己fork了源库 一段时间之后 源库已经更新了一些内容 这样 自己f
  • 【uni-app】使用uni-app实现简单的登录注册功能

    文章目录 前言 一 页面布局 二 注册页面 1 注册接口使用 2 注册成功提示 3 注册成功页面跳转 4 完整代码 三 登录页面 1 登录接口使用 2 本地存储使用 3 完整代码 总结 前言 大家好 今天和大家分享一下如何在uni app中
  • Vue3(快速上手)

    Vue2 与 Vue3 的区别 数据双向数据绑定 Vue2 0 数据绑定 是通过 Object defineProperty 来劫持对象属性的 geter 和 seter 操作 当数据发生改变发出通知 Object defineProper
  • 简单工厂模式、工厂方法模式和抽象工厂模式之间的异同

    注 纯属个人理解 如有错误请大家指正 相同之处 AbstractProduct ap Factroy createClass 1 都是利用工厂类 工厂子类 来创建对应的类对abastractProduct进行实例化操作 不同之处 简单工厂模
  • 循环-13. 求特殊方程的正整数解(15)

    本题要求对任意给定的正整数N 求方程X2 Y2 N的全部正整数解 输入格式 输入在一行中给出正整数N lt 10000 输出格式 输出方程X2 Y2 N的全部正整数解 其中X lt Y 每组解占1行 两数字间以1空格分隔 按X的递增顺序输出
  • Comparable接口对list的多条件排序

    版权声明 本文为博主原创文章 未经博主允许不得转载 https blog csdn net xiaoyanghapi article details 52496325 普通的类要实现排序 必须实现Comparable接口 并重写Compar
  • python生成exe文件运行闪退解决方法

    python生成exe文件运行闪退解决方法 使用pyinstaller生成 exe文件 pyinstaller F filename py 用python写了一个程序 在python下运行是正常的 但是生成exe文件后运行闪退 我当时怀疑是
  • 一文讲透缓存方案及常见问题——进阶篇

    前文有提到 缓存其中一种实施方式是利用硬件的读取速度的差异来做缓存加速 但是更高速的存储介质往往受限于成本 价格贵 或硬件限制 CPU缓存物理大小 其容量相较硬盘要小很多 再加上根据二八原则 热点数据可认为只占20 因此无论是处于实用还是成
  • 第九课:面向对象-类和对象

    第九课 面向对象 类和对象 一 面向对象简介 1 数据存储方面 1 变量 只能存储一个 如果内容多了 存储起来需要定义n个变量 麻烦 2 数组 可以存储一组相同数据类型的数据 3 数据类型相同 如果用数组存储一个人的信息 比较丰富的信息的话
  • 计算机系统基础课程实验课bomb--phase_4

    首先还是栈指针减24 应该也是为了存储多个值 然后和phase 3一样 把输入的值放在了 rcx和 rdx 输入格式也和phase 3一样 如图 然后将返回值与2作比较 如果不等于2就爆炸 所以只能输入两个数字 然后将第一个输入值d1与14
  • Layout布局中Button被拉伸解决方法

    问题描述 从一个项目中复制Layout布局到新的项目后 UI界面的Button总是被拉伸变大 网上找了许多资料 对Button属性各种设置却也未果 甚是郁闷 效果图如下 复制到另一项目后 gt 复制的布局代码
  • java中四种引用类型

    在JDK 1 2以前的版本中 若一个对象不被任何变量引用 那么程序就无法再使用这个对象 也就是说 只有对象处于可触及 reachable 状态 程序才能使用它 从JDK 1 2版本开始 把对象的引用分为4种级别 从而使程序能更加灵活地控制对