你知道 Java 有哪些引用吗?

一、概述

二、详解

1. 强引用

2. 软引用

3. 弱引用

4. 虚引用

前言

判断对象是否要回收有引用计数法和可达性算法两种方式,无论哪种都离不开引用,本文将介绍Java的四种引用。

概述

图片

java.lang.ref

图片

详解

01

强引用

 

概述

在Java程序中,强引用是最常见的也是默认的。new了一个对象,并将其指向一个变量,这个变量就成为指向该对象的一个强引用。

特点

  1. 强引用可以直接访问目标对象;
  2. 强引用所指向的对象在任何时候都不会被系统回收;
  3. 强引用可能导致内存泄漏

实现方式

Object obj = new Object() //这里的obj就是一个强引用
02

软引用

 

概述

软引用是用来描述一些还有用,但非必需的对象。只被软引用关联着的对象,在系统将要发生内存溢出异常前,会把这些对象列进回收范围之中进行第二次回收,如果这次回收还没有足够的内存,才会抛出内存溢出异常。

特点

  1. 软引用所指向的对象,内存溢出前才被系统回收;
  2. 软引用被回收后还没有足够的内存,仍会抛出内存溢出异常;
  3. GC 决定收回软可达对象时,会清理软引用,并可选地把引用存放到一个引用队列(Reference Queue)。

场景

软引用通常用来实现内存敏感的缓存。比如:可以使用软引用来缓存最近使用的图片或文本,一旦内存不足,垃圾回收器就会回收这些对象,从而释放内存。

实现方式

Object obj = new Object(); // 声明强引用
SoftReference<Object> sf = new SoftReference<>(obj);
obj = null; //销毁强引用
03

弱引用

 

概述

弱引用也是用来描述那些非必需对象,但是在系统GC时,只要发现弱引用,不管系统堆空间使用是否充足,都会回收掉只被弱引用关联的对象。

但是,由于垃圾回收器的线程通常优先级很低,因此,并不一定能很快地发现持有弱引用的对象。在这种情况下,弱引用对象可以存在较长的时间。

特点

弱引用所指向的对象,被发现就会被系统回收;

场景

  1. 缓存中存放的一些临时的数据。如,ThreadLocal;
  2. 多线程中经常被用来监控对象是否被垃圾回收器标记。

实现方式

Object obj = new Object(); // 声明强引用
WeakReference<Object> wf = new WeakReference<>(obj);
obj = null; //销毁强引用
04

虚引用

 

概述

所有引用类型中最弱的一个。一个对象是否有虚引用的存在,完全不会决定对象的生命周期。

特点

  1. 不能单独使用,虚引用必须和引用队列一起使用;
  2. 一个对象只被虚引用变量引用时,垃圾回收器会将该对象加入引用队列中;
  3. 无法通过虚引用来获取被引用的对象(当试图通过虚引用的get()方法取得对象时,总是null)。

场景

在回收该对象之前,虚引用变量将被放入引用队列中,因此通常用于在对象被回收时执行必要的清理工作。

例如:

  1. 关闭数据库连接或释放资源在并发编程中;
  2. 实现一些高级的对象生命周期管理,例如,对象池和线程池等。(追踪对象的生命周期,并在对象不再使用时及时清理它们,从而保证系统的可靠性和性能)

实现方式

Object obj = new Object(); // 声明强引用
ReferenceQueue phantomQueue = new ReferenceQueue(); //须和引用队列一起使用
PhantomReference<Object> pf = new PhantomReference<>(obj, phantomQueue);
obj = null;

原创文章,作者:guozi,如若转载,请注明出处:https://www.sudun.com/ask/78900.html

(0)
guozi's avatarguozi
上一篇 2024年5月30日 下午2:00
下一篇 2024年5月30日 下午2:17

相关推荐

  • 专业的网站优化公司排名,有经验的网站优化公司

    在当今的数字时代,拥有一个高质量的网站已成为业务发展的关键。但怎样才能让你的网站脱颖而出,吸引更多的客户呢?这就需要专业的网站优化工作室的帮助来提高你的网站质量。但是网站优化工作室…

    行业资讯 2024年3月19日
    0
  • 域名备案费用多少钱合适?

    你是否对域名备案费用一直感到困惑?想要了解更多关于域名备案的知识和费用情况吗?在如今网络互联网服务器行业中,域名备案已经成为必不可少的一环。但是,什么是域名备案?它又有着怎样的重要…

    行业资讯 2024年4月17日
    0
  • 打开被屏蔽的网站,国内被屏蔽的网站有哪些

    近年来,随着互联网的飞速发展,我们每天都会访问很多网站,但是你有没有想过,有些网站被屏蔽是什么呢?更重要的是,哪三大网站被屏蔽了呢?这些网站为何被封?这篇文章我们就来分析一下这个大…

    行业资讯 2024年5月6日
    0
  • 惠普服务器回收

    惠普服务器回收,一场关于网络安全加速行业的革命性变革。它不仅仅是一种简单的回收,更是一种意义和重要性的体现。那么,什么是服务器回收?它又有哪些意义和重要性?回收流程和相关政策又是怎…

    行业资讯 2024年4月20日
    0

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注