专注Java教育14年 全国咨询/投诉热线:444-1124-454
赢咖4LOGO图
始于2009,口口相传的Java黄埔军校
首页 学习攻略 Java四种引用知识点总结

Java四种引用知识点总结

更新时间:2019-11-25 15:19:52 来源:赢咖4 浏览2044次



  不管环境多么纵容你,你都要对自己有要求,保持一种自律的气质。或许它暂时不能改变你的现状,但假以时日,它回馈给你的一定让你惊喜。对自己有有要求的人,总不会过得太差。一边随波逐流,一边抱怨环境糟糕的人,最没劲了。


  从JDK1.2版本开始,把对象的引用分为四种级别,从而使程序更加灵活的控制对象的生命周期。这四种级别由高到低依次为:强引用、软引用、弱引用和虚引用。


  强引用

  Objectobj=newObject();


  上述Object这类对象就具有强引用,属于不可回收的资源,垃圾回收器绝不会回收它。当内存空间不足,Java虚拟机宁愿抛出OutOfMemoryError错误,使程序异常终止,也不会靠回收具有强引用的对象,来解决内存不足的问题。


  值得注意的是:如果想中断或者回收强引用对象,可以显式地将引用赋值为null,这样的话JVM就会在合适的时间,进行垃圾回收。


  下图是堆区的内存示意图,分为新生代,老生代,而垃圾回收主要也是在这部分区域中进行。

image.png


  2、软引用


  如果一个对象只具有软引用,那么它的性质属于可有可无的那种。如果此时内存空间足够,垃圾回收器就不会回收它,如果内存空间不足了,就会回收这些对象的内存。只要垃圾回收器没有回收它,该对象就可以被程序使用。


  软引用可用来实现内存敏感的告诉缓存。软引用可以和一个引用队列联合使用,如果软件用所引用的对象被垃圾回收,Java虚拟机就会把这个软引用加入到与之关联的引用队列中。


  Objectobj=newObject();


  ReferenceQueuequeue=newReferenceQueue();


  SoftReferencereference=newSoftReference(obj,queue);


  //强引用对象滞空,保留软引用


  obj=null;


  当内存不足时,软引用对象被回收时,reference.get()为null,此时软引用对象的作用已经发挥完毕,这时将其添加进ReferenceQueue队列中


  如果要判断哪些软引用对象已经被清理:


  SoftReferenceref=null;


  while((ref=(SoftReference)queue.poll())!=null){


  //清除软引用对象


  }


  3、弱引用


  如果一个对象具有弱引用,那其的性质也是可有可无的状态。


  而弱引用和软引用的区别在于:弱引用的对象拥有更短的生命周期,只要垃圾回收器扫描到它,不管内存空间充足与否,都会回收它的内存。


  同样的弱引用也可以和引用队列一起使用。


  Objectobj=newObject();


  ReferenceQueuequeue=newReferenceQueue();


  WeakReferencereference=newWeakReference(obj,queue);


  //强引用对象滞空,保留软引用


  obj=null;


  4、虚引用


  虚引用和前面的软引用、弱引用不同,它并不影响对象的生命周期。如果一个对象与虚引用关联,则跟没有引用与之关联一样,在任何时候都可能被垃圾回收器回收。


  注意:虚引用必须和引用队列关联使用,当垃圾回收器准备回收一个对象时,如果发现它还有虚引用,就会把这个虚引用加入到与之关联的引用队列中。


  程序可以通过判断引用队列中是否已经加入了虚引用,来了解被引用的对象是否将要被垃圾回收。如果程序发现某个虚引用已经被加入到引用队列,那么就可以在所引用的对象的内存被回收之前采取必要的行动。


  Objectobj=newObject();


  ReferenceQueuequeue=newReferenceQueue();


  PhantomReferencereference=newPhantomReference(obj,queue);


  //强引用对象滞空,保留软引用


  obj=null;


  引用总结


  对于强引用,平时在编写代码时会经常使用。


  而其他三种类型的引用,使用得最多就是软引用和弱引用,这两种既有相似之处又有区别,他们都来描述非必须对象。


  被软引用关联的对象只有在内存不足时才会被回收,而被弱引用关联的对象在JVM进行垃圾回收时总会被回收。

image.png

  四种对象引用的差异对比


  Java中4种引用的级别由高到低依次为:


  强引用>软引用>弱引用>虚引用


  垃圾回收时对比:

image.png

  对象可及性的判断


  在很多的时候,一个对象并不是从根集直接引用的,而是一个对象被其他对象引用,甚至同时被几个对象所引用,从而构成一个以根集为顶的树形结构。


  最后总结成一张表格:

image.png

       以上就是赢咖4java学院小编针对“Java四种引用知识点总结”的内容进行的回答,希望对大家有所帮助,如果对于学习Java的学习计划,怎么学才有效率,或者学完如果找工作的问题,请在线咨询,有专业老师随时为你服务。


相关推荐


零基础学Java编程,这些内容你一定要知道


学习Java编程了解一些免费Java开发工具


初学者学Java编程真的很难?


新手自学Java编程需要多长时间呢


学习Java编程可以做什么


提交申请后,顾问老师会电话与您沟通安排学习

免费课程推荐 >>
技术文档推荐 >>