jdk四种引用类型的作用及区别

本文介绍了Java中的四种引用类型:强引用、弱引用、软引用和虚引用的特点与应用场景,并通过示例代码展示了不同引用类型的使用方式。

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

一,简介

       在java中提供了四种引用的类型。分别为StrongReference、WeakReference 、SoftReference以及 PhantomReference。

二,四种引用类型的作用及区别

      StrongReference:强引用类型。是java 的默认引用实现,如果不特别指定,代码中使用的都是强引用。只要对象存在强引用,则gc的时候都不会清理掉该对象。

      WeakReference:弱引用类型。通过WeakReference引用的对象,如果没有该对象的强引用。则gc的时候会清理掉该对象。

      SoftReference:软引用类型。通过SoftReference引用的对象,即使没有该对象的强引用。gc时也不会回收该对象。只有当jvm内存不足时才会被回收, 这一特性使得 SoftReference 非常适合缓存应用数据。

      PhantomReference:虚引用类型。由于使用场景极少,不做解释。

三,应用举例

      

    static class User implements Serializable{
            private static final long serialVersionUID = 1L;
            private String name = null;
            
            public User(String name){
                this.name=name;
            }

            public String getName()
            {
                return name;
            }

            public void setName(String name)
            {
                this.name = name;
            }
         }

           public static void main(String[] args)
        {
              //強引用类型:变量strongReference对对象的引用为强引用
             User strongReference  = new User("strongReference");
             System.out.println(strongReference.getName());
             
             //弱引用类型: 变量weakReference对对象的引用为弱引用
             WeakReference<User> weakReference = new WeakReference<User>(new User("weakReference"));
             System.out.println(weakReference.get().getName());
             
             //软引用类型: 变量softReference对对象的引用为软引用
             SoftReference<User> softReference = new SoftReference<User>(new User("softReference"));
             System.out.println(softReference.get().getName());
             
             User user = weakReference.get();//user对对象的強引用
             System.out.println(user.getName());
             user = null;//清除強引用
             weakReference.clear();//清除弱引用
             softReference.clear();//清除软引用
        }
        
       //弱引用测试
       WeakReference<User> weakReference = new WeakReference<User>(new User("weakReference"));
       System.out.println(weakReference.get());//user对象
       System.gc();//调用jvm 垃圾回收器(不一定立即执行)
       Thread.sleep(10000);//阻塞线程10秒,等待gc执行
       System.out.println(weakReference.get()); //null

    具体JDK案例,可参考WeakHashMap的实现。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值