Java对象引用级别

news2024/12/22 21:18:44

为了使程序能更灵活地控制对象生命周期,从 JDK1.2 版本开始,JDK把对象的引用级别由高到低分为强引用、软引用、弱引用、虚引用四种级别。
在这里插入图片描述

  1. 强引用 StrongReference

强引用是我们最常见的对象,它属于不可回收资源,垃圾回收器(后面简称G C)绝对不会回收它,即使是内存不足,J V M宁愿抛出 OutOfMemoryErrorM 异常,使程序终止,也不会来回收强引用对象。

User user = new User();
  1. 软引用 SoftReference
  • 如果对象是软引用,那它的性质属于可有可无,因为内存空间充足的情况下,G C不会回收它,但是内存空间紧张,G C发现它仅有软引用,就会回收该对象,所以软引用对象适合作为内存敏感的缓存对象。
  • 只有对象仅被 SoftReference 引用,它才是软引用级别对象,因为对象可以在多处被引用,所以 SoftReference 引用的对象,它可能在其他处被强引用了。
User user = new User();
SoftReference<User> softReference = new SoftReference<>(user);
  1. 弱引用 WeakReference
  • 弱引用对象相对软引用对象具有更短暂的生命周期,只要 G C 发现它仅有弱引用,不管内存空间是否充足,都会回收它,不过 G C 是一个优先级很低的线程,因此不一定会很快发现那些仅有弱引用的对象。
  • 只有对象仅被 WeakReference 引用,它才是弱引用级别对象,因为对象可以在多处被引用,所以 WeakReference 引用的对象,它可能在其他处被强引用了。
User user = new User();
WeakReference<User> weakReference = new WeakReference<>(user);
  1. 虚引用 PhantomReference
  • 顾名思义,虚引用形同虚设,与其他几种引用不同,虚引用不会决定对象的生命周期。如果一个对象仅有虚引用,那它就和没有任何引用一样,任何时候都可能被 G C 回收.
  • PhantomReference使用get方法永远返回null,简单说就是「无法通过虚引用来获取对象的真实地址。
User user = new User();
PhantomReference<User> phantomReference = new PhantomReference<>(user);
  1. 小结
  • 虚引用图中,出现了ReferenceQueue(引用队列),引用队列是配合对象引用级别包装类(SoftReference、WeakReference、PhantomReference)使用,当对象引用级别包装类所指向的对象,被垃圾回收后,该对象引用级别包装类被追加到引用队列,因此可以通过引用队列做 G C 相关统计或额外数据清理等操作。
    在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/165653.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

区块链技术3--BTC协议

1数字货币中经常出现的问题&#xff1a;双花攻击 数字货币本身为带有签名的数据文件&#xff0c;可以进行复制。即&#xff1a;对用户来说&#xff0c;可以将同一货币花费两次。对货币添加唯一编号&#xff08;不可篡改&#xff09;&#xff0c;每次支付向货币发行单位查询真伪…

数据标注平台(CVAT)安装及踩坑记录

目录 一、CVAT安装 step1 安装docker step2 获取权限 step3 获取权限 step4 克隆cvat源代码 step5 构建docker镜像 step6 运行Docker容器这一步要下载公共docker映像&#xff0c;耗时看网速&#xff0c;但是不会太久。 step6 创建管理员用户 step7 关闭cvat服务 二、…

算法第十二期——BFS-判重

目录 BFS判重 Python判重方法: set、字典 set()判重 字典判重 例题&#xff1a;跳蚱蜢 思路 【建模】 去重 代码一&#xff1a;字典去重&#xff08;用list实现队列&#xff09; 代码二&#xff1a;set()去重&#xff08;用list实现队列&#xff09; 代码二&#xff…

CRMEB开源商城部署在腾讯云2

目录PHP在安装过程中会监测Redish5跨域PHP在安装过程中会监测Redis public\install\index.php if (extension_loaded(redis)) {$redis <span class"correct_span">&radic;</span> 已安装;} else {$redis <a href"https://doc.crmeb.com/w…

2个大厂 100亿级 超大流量 红包 架构方案

2个大厂 100亿级 超大流量 红包 架构方案 文章目录2个大厂 100亿级 超大流量 红包 架构方案100亿级 红包 应用 场景概述百亿级 微信红包技术架构架构**南北分布****拆红包入账异步化****发拆落地&#xff0c;其他操作双层cache**高并发**红包算法****柔性降级方案**360w QPS 10…

Nginx与LUA(3)

您好&#xff0c;我是湘王&#xff0c;这是我的CSDN博客&#xff0c;欢迎您来&#xff0c;欢迎您再来&#xff5e;在互联网应用中&#xff0c;很多场景都会涉及到高并发请求&#xff0c;如果不对这些请求做限制&#xff0c;那么服务器很快就会被挤垮。就像在12306买票一样&…

计算机图形学实习教程之基本图形的生成(扫描线填充算法+图形缩放算法+对称变换算法+消隐算法+金刚石图案算法),利用C#实现,附源码

环境&#xff1a;Win10Visual Studio 2022 Community 在本次实验中需要用到第一篇文章实验内容的代码及环境&#xff0c;详情请见&#xff1a;传送门 目录 一、实验目的 二、实验步骤 1.扫描线填充算法 2.图形的缩放算法 3.对称变换算法 4.消隐算法 5.金刚石图形算法 一…

Unity 3D 人形角色动画(Avatar)||Unity 3D 导航系统||Unity 3D 障碍物

Unity 3D 人形角色动画&#xff08;Avatar&#xff09; Mecanim 动画系统适合人形角色动画的制作&#xff0c;人形骨架是在游戏中普遍采用的一种骨架结构。。 由于人形骨架在骨骼结构上的相似性&#xff0c;用户可以将动画效果从一个人形骨架映射到另一个人形骨架&#xff0c…

基于Java+SpringBoot+Vue求职招聘系统设计与实现

博主介绍&#xff1a;✌全网粉丝3W&#xff0c;全栈开发工程师&#xff0c;从事多年软件开发&#xff0c;在大厂呆过。持有软件中级、六级等证书。可提供毕业项目实战✌ 博主作品&#xff1a;《微服务实战》专栏是本人的实战经验总结&#xff0c;《Spring家族及微服务系列》专注…

《Buildozer打包实战指南》第一节 在虚拟机中安装Ubuntu系统

目录 1.1 下载并安装Virtual Box虚拟机 1.2 下载并安装Ubuntu系统 由于Buildozer不能在Windows系统上打包&#xff0c;只能运行于Linux&#xff0c;所以我们可以在Windows系统上安装一个虚拟机&#xff0c;并在虚拟机中安装Linux。在本教程中笔者将会一直使用Ubuntu系统&…

大数据分案例-基于随机森林算法构建返乡人群预测模型

&#x1f935;‍♂️ 个人主页&#xff1a;艾派森的个人主页 ✍&#x1f3fb;作者简介&#xff1a;Python学习者 &#x1f40b; 希望大家多多支持&#xff0c;我们一起进步&#xff01;&#x1f604; 如果文章对你有帮助的话&#xff0c; 欢迎评论 &#x1f4ac;点赞&#x1f4…

ubuntu16.04安装verilator+systemc并运行测试程序

link Verilator 能够把可综合的&#xff08;通常不是行为级&#xff09;的Verilog代码&#xff0c;外加一部分Synthesis&#xff0c;SystemVerilog和一小部分Verilog AMS代码转换成C或者SystemC代码。Verilator不是一个完整的模拟器&#xff08;simulator&#xff09;&#xff…

打工人必学的法律知识(六)——《劳动法》案例-差绩效不等于「不能胜任工作」

目录 一、差绩效不等于「不能胜任工作」 二、劳动者无条件解除劳动合同的情形 一、差绩效不等于「不能胜任工作」 员工在用人单位等级考核中居于末位等次&#xff0c;不等同于“不能胜任工作”&#xff08;最高人民法院指导案例18号&#xff09; 2005年7月&#xff0c;被告王…

【Linux】Linux多线程(上)

前言 hi~ 大家好呀&#xff0c;欢迎来到我的Linux学习笔记。本篇笔记将会重点从内核结构引入Linux下的线程&#xff0c;理解Linux下线程和进程的相关性和区别&#xff0c;以及线程相关的操作方法&#xff0c;在到之后的线程互斥和线程同步中的条件变量相关概念哦~ Linux进程控…

世界杯数据可视化分析

目录 1.数据来源 2.字段解释 世界杯成绩信息表&#xff1a;WorldCupsSummary 世界杯比赛比分汇总表&#xff1a;WorldCupMatches.csv 世界杯球员信息表&#xff1a;WorldCupPlayers.csv 3.数据分析及可视化 世界杯已经告一段落&#xff0c;作为一个学习大数据的学生&…

CentOS即将停止维护,拥抱阿里“龙蜥“(Anolis OS),VMware安装Anolis OS与介绍

一、前言 大家在自己电脑来进行服务器的一些操作时&#xff0c;基本都是使用CentOS 7或者是CentOS 8&#xff0c;但是2021年底CentOS 8宣布停止了维护&#xff1b;CentOS 7 在2024年6月30日也会停止维护&#xff01; 所以我们是时候换一个操作系统了&#xff0c;经过十几年的…

[319]. 灯泡开关

[319]. 灯泡开关题目算法设计&#xff1a;完全平方数题目 传送门&#xff1a;https://leetcode.cn/problems/bulb-switcher/ 算法设计&#xff1a;完全平方数 问题是有多少灯是亮的。 那怎么样灯才会亮呢&#xff1f; 点偶数次相当于没点&#xff0c;开了又关。只有点奇…

标准库中的string类

深爱学习的你&#xff0c;在很多场景下一定经常和字符串打交道&#xff01; 字符串是以‘\0’结尾的字符合集&#xff0c;C语言中提供了一些库函数来处理字符串,让大家在写代码的过程中方便了许多&#xff1a; 字符串函数_Bug程序员小张的博客-CSDN博客字符串函数https://blog…

基于Simulink的带通BPSK信号调制解调实验报告(含代码和slx文件)

重要声明:为防止爬虫和盗版贩卖,文章中的核心代码和数据集可凭【CSDN订阅截图或公z号付费截图】私信免费领取,一律不认其他渠道付费截图! 摘要 数字相位调制又称为相移键控(Phase Shift Keying,PSK),是一种十分重要的基本数字调制技术,是一种用载波相位表示输入信号…

磨金石教育摄影技能干货分享|有哪些风格独特的摄影作品

1 奋勇向前照片中退却的海浪与冲上岸的海浪交汇拍打&#xff0c;形成大量的白色泡沫。于是画面被平均分成两部分&#xff0c;分割线由左上延伸到右下&#xff0c;一条明显的对角线。也让画面形成对称式的构图&#xff0c;所以照片看着既平衡又美观。作者给照片起名为《奋勇向前…