java有哪几种引用,Java 四种引用
Java中四种引用有什么区别?
Java中有四种引用:强引用、软引用、弱引用和虚引用。这四次引用的强度依次逐渐减弱。【推荐学习:java课程】
强引用(StrongReference)
强引用是最常用的引用。如果一个对象有一个强引用,垃圾收集器将永远不会回收它。当内存空间不足时,Java虚拟机宁愿抛出OutOfMemoryError,这样会使程序异常终止,也不会通过随意回收带有强引用的对象来解决内存不足的问题。
软引用(SoftReference)
如果一个对象只有软引用,内存空间足够,垃圾收集器不会回收;如果内存空间不足,这些对象的内存将被回收。只要垃圾收集器不回收它,程序就可以使用该对象。软引用可以用来实现对内存敏感的缓存。
软引用可以与ReferenceQueue结合使用。如果由软引用引用的对象被垃圾收集器收集,Java虚拟机将把软引用添加到与之相关联的引用队列中。
弱引用(WeakReference)
弱引用和软引用的区别在于,只有弱引用的对象生命周期更短。垃圾收集器线程在扫描所辖内存区域的过程中,一旦发现弱引用的对象,无论当前内存空间是否足够,都会回收其内存。但是,由于垃圾收集器是一个低优先级的线程,它可能不会很快找到那些具有弱引用的对象。
弱引用可以与ReferenceQueue一起使用。如果弱引用所引用的对象被垃圾收集,Java虚拟机将把弱引用添加到其相关联的引用队列中。
虚引用(PhantomReference)
顾名思义,‘虚拟引用’是没用的。与其他引用不同,虚拟引用不决定对象的生命周期。如果一个对象只持有一个虚拟引用,它可以在任何时候被垃圾收集器收集,就像它没有任何引用一样。
虚拟引用主要用于跟踪垃圾收集器收集的对象的活动。虚拟引用与软引用和弱引用的一个区别是虚拟引用必须与ReferenceQueue结合使用。当垃圾收集器准备回收一个对象时,如果它发现它仍然有一个虚拟引用,它会在回收该对象的内存之前将该虚拟引用添加到与之关联的引用队列中。
Java中提供这四种引用类型主要有两个目的:
让程序员通过代码来决定一些对象的生命周期;
JVM收集垃圾是有好处的。
也就是Java中的四个引用有什么区别?更多详情请关注我们的其他相关文章!
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。