美文网首页程序员
Java中的四种引用

Java中的四种引用

作者: 不知名的程序员 | 来源:发表于2018-11-01 22:21 被阅读0次

    引用在java中无处不在,一个对象的引用状态也影响着jvm对其的回收。这里简单介绍一下java中的四种引用。引用强度按照顺序依次减弱。

    1.强引用

    强引用是最常见的引用类型,平时用的最多,类似“X x = new X()” 的形式即为强引用,只要强引用存在,对象就不会被jvm回收。所以我们有时候看源码的时候会发现类似这样的代码“arr[i]=null”(在jdk集合源码常见),这样是方便jvm进行垃圾回收。

    2.软引用

    软引用使用SoftReference来表示。在系统将要发生内存溢出之前,将会把软引用所关联的对象列进回收范围并进行第二次回收,因为这个特性,他很适合用作系统中的简单缓存(虽然一般都会使用第三方的解决方案如redis)。

    3.弱引用

    弱引用使用WeakReference来表示,弱引用的对象只能存活到下一次垃圾回收之前,而不论内存是否足够。 当一个对象仅仅被weak reference指向, 而没有任何其他strong reference指向的时候, 如果GC运行, 那么这个对象就会被回收。在WeakHashMap(当一个键不再使用,会自动进行删除)与ThreadLocal都是用了弱引用

    4.虚引用

    虚引用也称幽灵引用,使用PhantomReference来表示。是最弱的一种引用,其get方法返回值总为null,即无法通过虚引用获得一个对象实例,设置一个对象和虚引用相关联的唯一目的就是在这个对象被垃圾回收时收到一个通知。虚引用需要和引用队列一起使用。关于虚引用的一个用处我知道的是在java中对于堆外内存的释放(具体可以看我的另一篇文章)。

    参考:周志明 《深入理解java虚拟机》

    相关文章

      网友评论

        本文标题:Java中的四种引用

        本文链接:https://www.haomeiwen.com/subject/uxuhtqtx.html