1 Java中有4中引用,强引用、软引用、弱引用、虚引用。
强引用:普通new出来一个对象 ,都是强引用。
软引用:SoftReference类,当内存不足的时候,会被回收。
弱引用:WeakReference类,内存充足也会被垃圾回收。
虚引用:最脆弱的引用,记录一个对象已经被回收了。
2 当某个对象只被弱引用的时候,Java的垃圾回收机制就会回收该对象。
3 我们知道一个对象定义出来,在堆内存中为其开辟空间,在栈中存储该对象的引用。比如定义一个Car a1 = new Car() ; 这时候在堆中开辟了一块空间存储Car的数据,而a1则存储在栈中,引用堆中的Car。
4 如果我们设置 a1 = null,那么堆中的Car空间就不被栈引用了,Java的垃圾回收就会回收这块内存。
5 如果我们设置 a1 = new Car() ; a2 = a1 ; a1 = null ; 这时候虽然 a1 不引用堆中的Car,但a2 还引用着堆中的Car,那么堆中的Car空间是不会被回收的。
6 这时候就可以使用弱引用了。 a1 = new Car() ; a2 = new WeakReference(a1) ; a1 = null。
这时候 a1 不再引用堆中的Car空间,a2 是一个弱引用,虽然引用着堆中的Car空间,由于堆中的Car空间只被弱引用,因此Java的垃圾回收就会回收该空间。
讲的非常好