首页 > 其他分享 >介绍一下四种引用类型

介绍一下四种引用类型

时间:2024-11-04 10:21:17浏览次数:2  
标签:对象 SoftReference 回收 队列 引用 类型 new 四种

1. **强引用(Strong Reference)**:
   - Java中默认声明的就是强引用,例如:`Object obj = new Object();`
   - 只要强引用存在,垃圾回收器将永远不会回收被引用的对象。
   - 如果想让对象被回收,可以将对象置为null。

2. **软引用(SoftReference)**:
   - 在内存足够的情况下,软引用不会被回收,只有在内存不足时,系统才会回收软引用对象。
   - 如果回收了软引用对象之后仍然没有足够的内存,才会抛出内存溢出异常。
   - 示例代码:`byte[] buff = new byte[1024 * 1024]; SoftReference<byte[]> sr = new SoftReference<>(buff);`

3. **弱引用(WeakReference)**:
   - 进行垃圾回收时,弱引用就会被回收。

4. **虚引用(PhantomReference)(幽灵引用/幻影引用)**:
   - 无法通过虚引用去获取对象。用途:用于gc时返回一个通知。虚引用主要用于跟踪对象的生命周期。

5. **引用队列(ReferenceQueue)**:
   - 引用队列可以与软引用、弱引用、虚引用一起配合使用。
   - 当垃圾回收器准备回收一个对象时,如果发现它还有引用,就会在回收对象之前,把这个引用加入到引用队列中。
   - 程序可以通过判断引用队列中是否加入了引用,来判断被引用的对象是否将要被垃圾回收,这样可以在对象被回收之前采取一些必要的措施。

(1)强引用
Java中默认声明的就是强引用,比如:    
Object obj = new Object();
        obj = null;
只要强引用存在,垃圾回收器将永远不会回收被引用的对象。如果想被回收,可以将对象置为null; 
(2)软引用(SoftReference)
在内存足够的时候,软引用不会被回收,只有在内存不足时,系统才会回收软引用对象,如果回收了软引用对象之后仍然没有足够的内存,才会跑出内存溢出异常。
        byte[] buff = new byte[1024 * 1024];
        SoftReference<byte[]> sr = new SoftReference<>(buff);
(3)弱引用(WeakReference)
进行垃圾回收时,弱引用就会被回收。
(4)虚引用(PhantomReference)
(5)引用队列(ReferenceQueue)
引用队列可以与软引用、弱引用、虚引用一起配合使用。
当垃圾回收器准备回收一个对象时,如果发现它还有引用,就会在回收对象之前,把这个引用加入到引用队列中。
程序可以通过判断引用队列中是否加入了引用,来判断被引用的对象是否将要被垃圾回收,这样可以在对象被回收之前采取一些必要的措施。

标签:对象,SoftReference,回收,队列,引用,类型,new,四种
From: https://www.cnblogs.com/89564f/p/18524633

相关文章

  • 介绍一下四种引用类型
    1.**强引用(StrongReference)**:  -Java中默认声明的就是强引用,例如:`Objectobj=newObject();`  -只要强引用存在,垃圾回收器将永远不会回收被引用的对象。  -如果想让对象被回收,可以将对象置为null。2.**软引用(SoftReference)**:  -在内存足够的情况下,软引用不会......
  • 介绍一下四种引用类型
    1.**强引用(StrongReference)**:  -Java中默认声明的就是强引用,例如:`Objectobj=newObject();`  -只要强引用存在,垃圾回收器将永远不会回收被引用的对象。  -如果想让对象被回收,可以将对象置为null。2.**软引用(SoftReference)**:  -在内存足够的情况下,软引用不会......
  • JavaScript(事件监听,点击事件,事件类型:鼠标事件mouseenter,mouseleave,焦点事件focus,blur,
    事件监听目标:能够给DOM元素添加事件监听什么是事件?事件是在编程时系统内发生的动作或者发生的事情比如用户在网页上单击一个按钮什么是事件监听?就是让程序检测是否有事件产生,一旦有事件触发,就立即调用一个函数做出响应,也称为绑定事件或者注册事件比如鼠标经过显示下拉菜......
  • Redis的ZSet底层数据结构,ZSet类型全面解析
    文章目录一、ZSet有序集合类型1.1简介1.2应用场景1.3底层结构1.4ZSet常用命令二、ZSet底层结构详解2.1数据结构2.2压缩列表ZipList2.3跳表详解2.3.1跳表是什么(what)2.3.2跳表怎么做的(how)2.3.3为什么需要跳表(WHY)/跳表高效的动态插入和删除2.3.4ZSet中的跳表2.4什么时候采......
  • redis的三种特殊数据类型
    Bitmap作用?Bitmap位图,都是操作二进制位来进行记录,就只有0和1两个状态。当一个事务只有两种状态的时候可以使用bitmap。使用场景?签到打卡,将签到设置为1,未签到设置为0。可以消耗极小的内存记录下打卡的天数,和快速统计。HyperLogLog作用?用于统计基数。那么......
  • 数据库大型对象类型
    一、引言在现代数据库应用中,除了存储简单的数值、文本等数据类型外,常常需要处理一些大型对象数据,如图片、音频、视频、大篇幅的文档等。为了满足这些需求,数据库引入了特定的大型对象类型,包括BLOB(BinaryLargeObject)、CLOB(CharacterLargeObject)、RAW、LONGRAW等。这些类......
  • 07-鸿蒙开发中的联合类型:灵活的数据处理
        大家好,欢迎来到鸿蒙开发系列教程!今天,我们将深入探讨联合类型(UnionTypes)这一重要的编程概念。联合类型在编程中非常有用,它可以让你的变量存储多种类型的数据,从而增加代码的灵活性。无论你是初学者还是有一定经验的开发者,理解联合类型的使用方法都是非常有帮助的。让......