标签:
问题:
在JDK1.2以前,对象只有“被引用”和“不被引用”两种状态,对于一些“现在没用,但不确定以后是否有用”的对象,在这种场景下只能被定义为“不被引用”,因而会被垃圾回收。
一旦将来使用到该对象,就会发现这个对象找不到了。
我们希望描述这样的一类对象:如果内存空间充足,则保持在内存中;如果垃圾回收后的内存依旧很紧张,则释放这些对象占用的内存。(比如系统的缓存功能)
4种引用类型:
JAVA在1.2之后引入了4种引用类型:强引用(Strong Reference),软引用(Soft Reference),弱引用(Weak Reference),虚引用(Phantom Reference)。4种引用的强度依次递减。
强引用: 就是普通的引用,如StringBuffer sb = new StringBuffer(), 只要强引用存在,就不会被垃圾回收;
软引用:只要内存空间足够,就不会释放软引用的对象;当系统将要发生内存溢出时,才会将软引用的对象列入回收范围,JDK1.2使用SoftReference类实现软引用;
弱引用:弱引用不会影响对象的生命周期,垃圾回收器对弱引用的对象会当成普通对象处理(只要没有强引用就可以被回收);JDK1.2使用WeakReference类实现弱引用;
虚引用:虚引用不会影响对象的生命周期,无法通过虚引用获取对象实例;创建虚引用的目的是可以在对象被垃圾收集器回收时收到一个系统通知。JDK1.2使用PhantomReference类实现虚引用。
标签:
原文地址:http://www.cnblogs.com/linxiong/p/4401730.html