点击↑上方↑蓝色“编了个程”关注我~

每周至少一篇原创文章
这是本公众号的第 11 篇原创文章

前几天在CodeReview的时候,看到了一个用WeakHashMap
的代码,进而聊到了WeakReference
,再聊到Java四种引用类型。
回想了一下,上次学习Java的强软弱虚四种引用类型,还是在准备面试的时候。平时用得不多,一下子竟然想不清楚它们的区别,只记得它们的强度依次递减。
下来又看了一下这方面的文章,今天好好把它们理清楚。
四种引用的区别
其实四种引用的区别在于GC的时候,对它们的处理不同。用一句话来概括,就是:如果一个对象GC Root可达,强引用不会被回收,软引用在内存不足时会被回收,弱引用在这个对象第一次GC会被回收。
❝
如果GC Root不可达,那不论什么引用,都会被回收
❞
虚引用比较特殊,等于没有引用,不会影响对象的生命周期,但可以在对象被收集器回收时收到一个系统通知。
下面结合案例分别来讲一下四种引用在面对GC时的表现以及它们的常见用途。先设置一下JVM的参数:
-Xms20M -Xmx20M -Xmn10M -verbose:gc -XX:+PrintGCDetails
强引用
这就是我们平时最常使用的引用。只要GC的时候这个对象GC Root可达,它就不会被回收。如果JVM内存不够了,直接抛出OOM。比如下面这段代码就会抛出OutOfMemoryError
:
public static void main(String[] args) {
List