Java中的四种引用方式

本文详细介绍了Java中的四种引用类型:强引用、软引用、弱引用和虚引用,包括它们的特点、应用场景及如何与引用队列配合使用。通过具体代码示例,帮助读者理解不同引用类型在内存管理中的角色。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.强引用( Strong Reference )


➢最普遍的引用:

      代码中的object和str都是强引用:

Object object = new Object();
String str = "hello";

➢抛出OutOfMemoryError终止程序也不会回收具有强引用的对象
➢通过将对象设置为null来弱化引用,使其被回收

 

2.软引用( Soft Reference )


➢对象处在有用但非必须的状态
➢只有当内存空间不足时, GC会回收该引用的对象的内存
➢可以用来实现高速缓存(作用)--
比如网页缓存、图片缓存

      softRef就是软引用

 软引用还可以和一个引用队列(ReferenceQueue)联合使用,如果软引用所引用的对象被JVM回收,这个软引用就会被加入到与之关联的引用队列中。

public class Main {
    public static void main(String[] args) {
        SoftReference<String> sr = new SoftReference<String>(new String("hello"));
          
        System.out.println(sr.get());
        System.gc();                //通知JVM的gc进行垃圾回收
        System.out.println(sr.get());
    }
}

3.弱引用( Weak Reference )


➢非必须的对象,比软引用更弱一-些
➢GC时会被回
➢被回收的概率也不大,因为GC线程优先级比较低
➢适用于引用偶尔被使用且不影响垃圾收集的对象

String str=new String( original: "abc");
WeakReference<String> abcWeakRef = new WeakReference<String>(str);

4.虚引用( PhantomReference )


➢不会决定对象的生命周期
➢任何时候都可能被垃圾收集器回收
➢跟踪对象被垃圾收集器回收的活动,起哨兵作用

➢必须和引用队列ReferenceQueue联合使用

    当垃圾回收器准备回收一个对象时,如果发现它还有虚引用,就会把这个虚引用加入到与之 关联的引用队列中。程序可以通过判断引用队列中是否已经加入了虚引用,来了解被引用的对象是否将要被垃圾回收。如果程序发现某个虚引用已经被加入到引用队列,那么就可以在所引用的对象的内存被回收之前采取必要的行动。

String str=new String( original: "abc");
ReferenctQueue queue = new ReferenceQueue();
PhantomReference ref = new PhantomReference(str, queue);

 

 

下面看看类层次结构

 

引用队列( ReferenceQueue )


     ➢无实际存储结构,存储逻辑依赖于内部节点之间的关系来表达

     ➢存储关联的且被GC的软引用,弱引用以及虚引用

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值