Java的四种引用类型

news2024/11/24 4:32:31

Java的四种引用类型

    • 1. 强引用(Strong Reference)
    • 2. 软引用(Soft Reference)
    • 3. 弱引用(Weak Reference)
    • 4. 虚引用(Phantom Reference)


💖The Begin💖点点关注,收藏不迷路💖

在Java中,引用类型不仅仅是简单的指针,它们还决定了对象的生命周期和内存管理方式。Java提供了四种主要的引用类型:强引用、软引用、弱引用和虚引用,每种类型都有其特定的用途和特点。

1. 强引用(Strong Reference)

  • 特点:确保对象不被垃圾回收器回收,除非显式置为null
  • 用途:保护重要对象,防止意外回收。

强引用是Java中最常见的引用类型,它保证了对象在内存中的存在,直到引用被显式地置为null或程序结束。

2. 软引用(Soft Reference)

  • 特点:内存充足时不影响对象,内存不足时可能被回收。
  • 用途:实现内存敏感的高速缓存。

软引用提供了一种较为灵活的内存管理方式。当内存充足时,软引用的对象不会被回收;但当内存不足时,这些对象可能会被垃圾回收器回收,以释放内存。

3. 弱引用(Weak Reference)

  • 特点:对象随时可能被垃圾回收器回收,不受内存状态影响。
  • 用途:管理非必需对象,避免内存泄漏。

弱引用比软引用更加“脆弱”,只要JVM进行垃圾回收,无论内存是否充足,弱引用的对象都有可能被回收。这使得弱引用成为管理非必需对象、避免内存泄漏的理想选择。

4. 虚引用(Phantom Reference)

  • 特点:几乎不影响对象生命周期,主要用于跟踪对象被回收的状态。
  • 用途:与引用队列结合,获取对象被回收的通知。

虚引用是所有引用类型中最弱的一种,它几乎不会对对象的生命周期产生任何影响。当一个对象仅持有虚引用时,该对象仍然可以随时被GC回收。虚引用的主要用途是与引用队列结合,当对象被回收时,虚引用会被加入到引用队列中,从而允许程序在对象被回收前进行必要的处理。


这四种引用类型共同构成了Java强大的内存管理机制,使得能够更加灵活地控制对象的生命周期和内存使用。

在这里插入图片描述


💖The End💖点点关注,收藏不迷路💖

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

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

相关文章

硬件工程师笔面试真题汇总

目录 1、电阻 1)上拉电阻的作用 2)PTC热敏电阻作为电源电路保险丝的工作原理 2、电容 1)电容的特性 2) 电容的特性曲线 3) 1uf的电容通常来滤除什么频率的信号 3、电感 4、二极管 1)二极管特性 2)二极管伏安…

MySQL练手 --- 1633. 各赛事的用户注册率

题目链接:1633. 各赛事的用户注册率 思路: 两张表,一张为Users用户表,该表存储着所有用户的 user_id 和 user_name 另一张表为Register注册表,该表存储着赛事id(contest_id),和已…

NumpyPandas:Pandas库(25%-50%)

目录 前言 一、列操作 1.修改变量列 2.筛选变量列 3.删除变量列 4.添加变量列 二、数据类型的转换 1.查看数据类型 2.将 ok的int类型转换成float类型 3.将ar的float类型转换成int类型 三、建立索引 1.建立DataFrame时建立索引 2.在读入数据时建立索引 3.指定某列或…

PHP8.3.9安装记录,Phpmyadmin访问提示缺少mysqli

ubuntu 22.0.4 腾讯云主机 下载好依赖 sudo apt update sudo apt install -y build-essential libxml2-dev libssl-dev libcurl4-openssl-dev pkg-config libbz2-dev libreadline-dev libicu-dev libsqlite3-dev libwebp-dev 下载php8.3.9安装包 nullhttps://www.php.net/d…

【Linux】生产者消费者模型 + 线程池的介绍和代码实现

前言 上节我们学习了线程的同步与互斥,学习了互斥锁和条件变量的使用。本章我们将学习编程的一个重要模型,生产者消费者模型,并且运用之前学的线程同步和互斥的相关接口来实现阻塞队列和环形队列,最后再来实现一个简易的线程池。 …

springboot电子产品销售系统-计算机毕业设计源码80294

摘 要 电子商务行业在全球范围内迅速发展,随之而来的是电子产品销售市场的快速增长和消费者对在线购物体验的需求提升,因此,电子产品销售系统应运而生。该系统旨在满足电子产品市场的需求,提供全面的购物功能和高效的管理操作。 …

严格模式 模块化开发

严格模式 当你在脚本或函数的顶部添加"use strict"语句时,你的代码将在严格模式下执行。这可以帮助你避免某些常见的编程陷阱,例如在不声明变量的情况下就使用它们,或者删除变量、函数或函数参数。在严格模式下,这样的…

进阶篇,内附代码:锂电池二阶模型-离线与在线参数辨识

锂电池二阶模型-在线参数辨识 背景二阶等效电路模型介绍二阶模型的离线参数辨识二阶模型的RLS表达式递推代码已知问题背景 锂电池一阶戴维南等效模型的参数辨识方法,已经在前面两期详细地讲解了一轮。 一阶模型-离线参数辨识一阶模型-在线参数辨识本期继续讲解一下如何进行二…

stm32——lcd液晶显示

一.液晶屏介绍 液晶显示屏是由液晶显示面板,电容触摸屏,pcb底板构成。在液晶显示屏里我们有带控制芯片的还有不带控制芯片的。对于低端的微控制器它不能直接控制液晶面板,所以需要给液晶控制面板而外增加一个液晶控制芯片。对于单片机stm32f4…

Photos框架 - 自定义媒体选择器(UI预览)

引言 在前面的博客中我们已经介绍了使用媒体资源数据的获取,以及自定义的媒体资源选择列表页。在一个功能完整的媒体选择器中,预览自然是必不可少的,本篇博客我们就来实现一个资源的预览功能,并且实现列表和预览的数据联动效果。…

内网横向——远程桌面利用

文章目录 一、远程桌面的确定和开启二、RDP Hijacking 网络拓扑: 攻击机kali IP:192.168.111.0 跳板机win7 IP:192.168.111.128,192.168.52.143 靶机win server 2008 IP:192.168.52.138 一、远程桌面的确定和开启 下面…

VMware、Docker - 让虚拟机走主机代理,解决镜像封禁问题

文章目录 虚拟机全局代理配置找到 VMnet8 的 IPv4 地址代理相关配置虚拟机代理配置 Docker 代理配置修改镜像修改 Docker 代理配置 虚拟机全局代理配置 找到 VMnet8 的 IPv4 地址 a)打开此电脑,输入 “控制面板”,然后回车. b)之…

元注解相关知识总结

Target 这个注解适用于决定注解的适用范围,例如适用于构造器,方法,字段等 Retention 这个注解的作用是确定注解的生命周期一般用得比较多的是RunTime这样就可以在运行环境中使用它,赋值的方式一般是使用value进行赋值 SOURCE 代…

【初阶数据结构篇】顺序表的实现(赋源码)

文章目录 本篇代码位置顺序表和链表1.线性表2.顺序表2.1 概念与结构2.2分类2.2.1 静态顺序表2.2.2 动态顺序表 2.3 动态顺序表的实现2.3.1动态顺序表的初始化和销毁及打印2.3.2动态顺序表的插入动态顺序表的尾插动态顺序表的头插动态顺序表的在指定位置插入数据 2.3.3动态顺序表…

spring常用注解有哪些

Spring框架使用了大量的注解来简化配置和开发,以下是一些常用的Spring注解: 1.Component:通用的构造型注解,用于标记一个类作为Spring管理的组件,通常用于自定义组件。 2.Autowired:用于自动装配Bean&#…

Android Add a Header to the GridLayout

RecyclerView 添加 Header, RecycleView 设置 LayoutManager 为 GridLayoutManger的 时候; Header 要占用3行 val manager GridLayoutManager(activity, 3)binding.sleepList.layoutManager manager// span size for each position, and assign it to manager.spa…

Golang零基础入门课_20240726 课程笔记

视频课程 最近发现越来越多的公司在用Golang了,所以精心整理了一套视频教程给大家,这个只是其中的第一部,后续还会有很多。 视频已经录制完成,完整目录截图如下: 课程目录 01 第一个Go程序.mp402 定义变量.mp403 …

github简单地操作

1.调节字体大小 选择options 选择text 选择select 选择你需要的参数就可以了。 2.配置用户名和邮箱 桌面右键,选择git Bash Here git config --global user.name 用户名 git config --global user.email 邮箱名 3.用git实现代码管理的过程 下载别人的项目 git …

PlatformIO+ESP32S3学习:通过WIFI与和风天气API获取指定地点的天气情况并显示

1. 硬件准备 你只需要有一个ESP32S3开发板。我目前使用的是: 购买地址:立创ESP32S3R8N8 开发板 2. 和风天气API 2.1. 和风天气介绍 和⻛天气是中国领先的气象科技服务商、国家高新技术 企业,致力于运用先进气象模型结合大数据、人工智能 技术…

Halcon 引擎方式调试

1.C# 端添加代码 启动调试模式 public HDevEngine MyEngine new HDevEngine(); // halcon引擎;// 启动调试服务 MyEngine.StartDebugServer();2.Halcon程序添加到进程 打开Halcon程序 【执行】>【附加到进程】 点击【确定】 3.C# 程序执行到相关位置 C# 程序执行调用…