Java一共有四种类型的饮用,StrongReference, SoftReference, WeakReference, PhantomReference。这四种类型的引用与GC有着密切的联系。
1 StrongReference, 强引用,最常见,就是我们平常写的引用类型。
Object o = new Object();
Object o2 = o;
o和o2都是强引用。只要存在强引用,GC是不会进行回收的。
2 SoftReference, 软引用,这种类型的引用只会在JVM将要OutOfMemory时才会被回收。主要用于缓存,当内存不够时,才去收集这些缓存的内存,从而使缓存不影响应用的内存使用量。
Object o = new Object();
SoftReference<Object> softReferenceObj = new SoftReference<Object>(o);
o = null;
assertNotNull(softReferenceObj.get());
3 WeakReference, 弱引用,这种类型的引用会在GC时被回收。一般用weak reference引用的对象是有价值被cache, 而且很容易被重新被构建, 且很消耗内存的对象。
Object o = new Object();
WeakReference<Object> weakReferenceObj = new WeakReference<Object>(o);
o = null;
System.gc();
assertNull(weakReferenceObj.get());
4 PhantomReference, 虚引用,虚引用既不会影响对象的生命周期,也无法通过虚引用来获取对象实例,只用于在发生GC时接收一个系统通知。
原文:http://blog.csdn.net/hongchangfirst/article/details/50735576
作者:hongchangfirst
hongchangfirst的主页:http://blog.csdn.net/hongchangfirst