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 str= new String("abc");
(2)System.gc();//堆内存,垃圾回收,会将对象去掉-----注意: abc 是在常量池中,而垃圾回收是回收“堆内存的!”
小结:
我们从java的引用对象开始引出,可以达到牵一发而动全身。到后面引出的对象可及性,从对象可及性又引出垃圾回收等等,都是从什么出来的?都是从门卫原理延伸开来的(是什么,有什么,能干什么,怎么干?为什么这么干,对比的优缺点。)好了,到这里我们今天的分享就先告一个阶段,敬请期待小编的下一篇博客。