背景
从jdk1.2开始,对象引用就被划分为4中类型:强引用、软引用、弱引用、虚引用。
为什么分为4种引用类型?
1)可以让程序员通过代码觉得对象的生命周期。
2)有利于垃圾回收。
引用类型
强引用:最普遍引用。只要某对象被强引用,即使内存空间不足JVM也不会回收改对象。
软引用:只有在内存空间不足时才会回收被引用的对象,当内存空间不足时,触发GC,如果GC后内存还是不足,JVM会把软引用包裹的对象干掉。
弱引用:不管内存是否充足,只要发生GC,弱引用就被回收。
虚引用:无法通过虚引用获取一个对象的真实引用,必须配合ReferenceQueue一起使用。当GC回收一个对象时,如果发现它有虚引用,就会在回收之前将虚引用加入队列中。