Java的引用


有那些引用方式?

  
Java中共有四种引用方式,分别是①强引用 ②软引用 ③弱引用 ④虚引用


提供这些引用方式的目的是什么?

  
①可以使程序员可以通过代码控制或知晓对象的生命周期

  
②有利于程序的垃圾回收



一、强引用
  表现形式:new 例如Object o = new Object();
  引用强度:强引用是四种引用方式中强度最高的方式,只要强引用存在,垃圾回收器就不会对引用对象进行回收,即使内存不足,虚拟机也只会报出OOM(Out Of Memory 计算机内存耗尽 )异常,而不会去执行垃圾回收工作。
  强引用的回收:①当方法运行结束,引用消失,强引用对象将被回收
         ②将引用赋值为null;


二、软引用
  表现形式:SoftReference sr = new SoftReference(new String(“hello”));
  引用强度:软引用的引用强度次于强引用,用来设定有用但不必须的对象,当计算机中的内存充足时,引用对象将不会被回收,但当计算中内存不足时,引用对象将被垃圾回收器回收。
  软引用的使用:软引用能防止出现内存不足的情况,常用于实现网页的缓存,图片缓存等。当软引用对象未被回收时,使用软引用类所提供的get方法将返回该对象的强引用,若被回收,将返回null。


三、弱引用
  表现形式:WeakReference weakReference = new WeakReference(new User());
  引用强度:弱引用的引用强度次于软引用,弱引用用于设定不必须的对象,该对象无论内存是否充足,当垃圾回收进行时都将被回收,并且与之关联的引用(只与其关联)都将被回收。


四、虚引用
  表现形式:虚引用必须与引用队列关联使用,例如ReferenceQueue queue = new ReferenceQueue();
PhantomReference<byte[]> reference = new PhantomReference<byte[]>(new byte[1], queue);
  引用强度:虚引用的引用强度是四种引用中强度最弱的,这意味着虚引用的的对象在任何时候都有可能被GC回收,同时也可以看出虚引用并不影响对象的生命周期





                     一天不学习我心赤闹,奥利给,干啦。在这里插入图片描述