Java强引用软引用弱引用虚引用
Java有4种引用类型:强引用、软引用、弱引用、虚引用。
程序中一般只用强引用和软引用,软引用的优点在于内存不够时GC会主动回收,防止OutOfMemory异常。
参考:https://segmentfault.com/a/1190000015282652
强引用
平时程序中的引用就是强引用。如果一个对象具有强引用,GC一定不会回收它,即使内存不够用了。
软引用
如果一个对象只具有软引用,只有当内存不够时,GC会回收它。GC会先回收很久没用的软引用。
软引用的使用方法:
1 | Person person = new Person("abc"); |
创建软引用对象SoftReference时,可以将软引用对象和一个引用队列ReferenceQueue关联,如果软引用所引用的对象被垃圾回收,JVM就会把这个软引用加入到与之关联的引用队列中。
弱引用
如果一个对象只具有弱引用,无论内存是否足够,到GC回收的时间时它都会被回收。弱引用也可以和一个引用队列ReferenceQueue关联。
弱引用的使用方法:
1 | Person person = new Person("abc"); |
虚引用
如果一个对象只具有虚引用,那么它和“没有引用”的对象无区别,随时都会被GC回收。虚引用必须和一个引用队列ReferenceQueue关联。