首页 > 编程语言 >java 中都有哪些引用类型

java 中都有哪些引用类型

时间:2024-11-09 11:07:48浏览次数:3  
标签:java 哪些 对象 SoftReference 回收 队列 内存 引用

  1. 强引用(Strong Reference)
  • Java中默认声明的就是强引用,例如:​​Object obj = new Object();​
  • 只要强引用存在,垃圾回收器将永远不会回收被引用的对象 ,哪怕内存不足时,JVM也会直接抛出OutOfMemoryError,不会去回收。如果想中断强引用与对象之间的联系,可以显示的将强引用赋值为null。
  • 如果想让对象被回收,可以将对象置为null。
  1. 软引用(SoftReference): 软引用是用来描述一些非必需但仍有用的对象
  • 在内存足够的情况下,软引用不会被回收,只有在内存不足时,系统才会回收软引用对象。
  • 如果回收了软引用对象之后仍然没有足够的内存,才会抛出内存溢出异常。 。这种特性常常被用来实现缓存技术,比如网页缓存,图片缓存等
  • 示例代码:​​byte[] buff = new byte[1024 * 1024]; SoftReference<byte[]> sr = new SoftReference<>(buff);​
  1. 弱引用(WeakReference)
  • 弱引用的引用强度比软引用要更弱一些,无论内存是否足够,只要 JVM 开始进行垃圾回收,那些被弱引用关联的对象都会被回收。
  1. 虚引用(PhantomReference)(幽灵引用/幻影引用)
  • 无法通过虚引用去获取对象。用途:用于gc时返回一个通知。虚引用主要用于跟踪对象的生命周期。 虚引用是最弱的一种引用关系,如果一个对象仅持有虚引用,那么它就和没有任何引用一样,它随时可能会被回收
  1. 引用队列(ReferenceQueue)
  • 引用队列可以与软引用、弱引用、虚引用一起配合使用。
  • 当垃圾回收器准备回收一个对象时,如果发现它还有引用,就会在回收对象之前,把这个引用加入到引用队列中。
  • 程序可以通过判断引用队列中是否加入了引用,来判断被引用的对象是否将要被垃圾回收,这样可以在对象被回收之前采取一些必要的措施。

 

标签:java,哪些,对象,SoftReference,回收,队列,内存,引用
From: https://www.cnblogs.com/89564f/p/18536468

相关文章

  • macOS 如何优雅地配置Java开发环境.md
    一、准备确保HomeBrew存在以下命令即可安装HomeBrewexportHOMEBREW_BREW_GIT_REMOTE="https://mirrors.ustc.edu.cn/brew.git"exportHOMEBREW_CORE_GIT_REMOTE="https://mirrors.ustc.edu.cn/homebrew-core.git"exportHOMEBREW_API_DOMAIN="https://mirro......
  • Java开发环境搭建
    JDK下载与安装下载地址卸载JDK删除java的安装目录在环境变量中删除JAVA_HOME删除path下关于java的目录指向执行java-version安装JDK安装下载的JDK安装文件配置环境变量检查安装是否成功HelloWorld新建一个Hello.java文件publicclassHello{......
  • Java基础语法闪过——纯小白
    Java语法突击笔者因为学校奇葩选课原因,需要学习Java,考试所迫和大伙一起交流复习下基础的语法内容,大家都一把拿下考试......
  • Java期末复习暨第一次上机课作业
    Java期末复习暨第一次上机课作业第一道题:第8行代码:35.6本来要赋值给double类型变量,现在赋值给 flaot类型变量f,就要强制类型转换为float类型。输出结果:第二道题: 定义了一个double型变量r并赋值为23.5,之后输出圆的面积。输出结果: ......
  • 【含文档+PPT+源码】基于JavaWeb的高校迎新系统系统
    项目背景与意义随着高校招生规模的不断扩大和信息化建设的深入,大学生迎新报到工作面临着越来越多的挑战。传统的迎新报到方式,如学生排队等待、填写纸质表格等,不仅效率低下,容易出错,还给学生和学校带来了诸多不便。特别是在新生入学的高峰期,传统的迎新流程往往会导致报到现场人......
  • Java中序列化与反序列化
    序列化(Serialization)和反序列化(Deserialization)是计算机科学中用于数据存储和传输的两种基本操作。序列化:序列化是将对象的状态信息转换为可以存储或传输的形式的过程。简单来说,就是将对象转换为字节序列(比如JSON、XML等格式)。目的:使得对象可以在网络上进行传输,或者存储到文......
  • JavaCV 图像边缘检测 之 Canny 算法
    ......
  • Springboot 整合 Java DL4J 打造自然语言处理之语音识别系统
    ......
  • 【JAVA毕业设计】基于Vue和SpringBoot的技术交流分享平台
    博主说明:本文项目编号T053,文末自助获取源码\color{red}{T053,文末自助获......
  • 【JAVA毕业设计】基于Vue和SpringBoot的服装销售平台
    博主说明:本文项目编号T054,文末自助获取源码\color{red}{T054,文末自助获......