Java引用对象


Java引用对象

 

前言:

    今天我们通过java引用对象再聊聊思维导图。你会想讲什么思维导图,干净利索赶紧切人正题吧,不,今天小编要和再来交流交流思维导图。高效人士以及哈佛MIT绝大多数学生都是因为思维导图的帮助,才是他们成为全世界的天之骄子。

    思维导图,通俗的说就是能够互相连篇的能力。一个接着一个,这个有接着串起了那个,就是简单。但是说去确实简单,牛b的人都是赢在执行力!今天我们结合java引用对象这个话题来聊聊思维导图。

 

                  


Java的引用对象

     1,强引用:strongference  ,通过“=” 号引用

     2,软引用:softreference

     3,弱引用:weakreference

     4,虚引用:phantomReference

 

代码实践:

 package com.itheima;
import java.lang.ref.SoftReference;
import java.lang.ref.WeakReference;
public class ReferenceTest {
    public static void main(String[] args)
    {
        String str="abc";
        //创建一个软引用,引用到Str
        SoftReference<String> sfr=new SoftReference<String>(str);
        
        //创建一个弱引用,引用到Str
        WeakReference<String> wrf=new WeakReference<String>(str);
        
        str=null;
        
        String srfString=sfr.get();
        String wrfString=wrf.get();
        
        System.out.print("软引用获取到的对象:"+ srfString+"\n");
        System.out.append("弱引用获取到的对象:"+ wrfString);
        
    }
}


 

运行结果:

 



怎么去掉软引用?:

    怎么去掉呢? 只需要添加代码:

 

     //清除软引用的引用链

     sfr.clear();

 

图示:

           



显示结果:

               

 

 

   对象的可及性:

     *强可及对象:永远不会被GC回收

     *软可及对象:当系统内存不足是,被GC回收

     *弱可及对象:当系统一发现这对象,就马上进行回收。


注意:(1 GC回收的是堆内存。

           2)有最强引用类型决定

 

 

垃圾回收:

 

package com.itheima;
import java.lang.ref.SoftReference;
import java.lang.ref.WeakReference;
public class ReferenceTest {
    public static void main(String[] args)
    {
        //String str="abc";//常量池
        //堆内存中创建了String对象,
        //2,在常量池中创建“abc”对象
        String str= new String("abc");
        
        
        //创建一个软引用,引用到Str
        SoftReference<String> sfr=new SoftReference<String>(str);
        
        //创建一个弱引用,引用到Str
        WeakReference<String> wrf=new WeakReference<String>(str);
        
        str=null;//相当于去掉前引用链
        //清除软引用的引用链
        sfr.clear();
                
        System.gc();//堆内存,垃圾回收,会将对象去掉-----注意: abc 是在常量池中,而垃圾回收是回收“堆内存的!”
            
        String srfString=sfr.get();
        String wrfString=wrf.get();
        
        
        System.out.print("软引用获取到的对象:"+ srfString+"\n");
        System.out.append("弱引用获取到的对象:"+ wrfString);
        
    }
}
 


具体代码变化:

 

  (1//String str="abc";//常量池

        //堆内存中创建了String对象,

        //2,在常量池中创建abc对象

        String strnew String("abc");

        

  (2)System.gc();//堆内存,垃圾回收,会将对象去掉-----注意: abc 是在常量池中,而垃圾回收是回收堆内存的!

 


小结:

      我们从java的引用对象开始引出,可以达到牵一发而动全身。到后面引出的对象可及性,从对象可及性又引出垃圾回收等等,都是从什么出来的?都是从门卫原理延伸开来的(是什么,有什么,能干什么,怎么干?为什么这么干,对比的优缺点。)好了,到这里我们今天的分享就先告一个阶段,敬请期待小编的下一篇博客。

 

                                  




评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值