内存管理与垃圾收集(四)

内存管理与垃圾收集(四)
----3中特殊的引用
(1)弱引用
实际开发中有时会遇到这样的情况,系统中会不断产生新的相同类型的对象,这些对象在使用后可以不保留而成为垃圾,但在内存允许的情况下最好尽量保留,可能还需要使用。这时可以使用弱引用----java.lang.ref.WeakReference就可以解决这个问题。
注:为了方便对弱引用对象的管理,java中提供了一个java.util.WeakHashMap类,其用法与普通的HashMap相同,只是其中指向键(key)对象的引用自动为弱引用。
弱引用不影响对象是否成为垃圾,若一个对象在不计算弱引用的情况下满足垃圾收集的条件,其就是垃圾。
弱应用适合用于解决称之为“流失监听者内存泄露”的问题

(2)软引用
对于弱引用指向的对象,在没有进行垃圾收集的情况下还可以进行调用,但一旦进行了垃圾收集就会被清除出内存。如果想“只要内存没有耗尽,都不要尝试释放这些对象”,可以使用Java中提供的阮引用----java.lang.ref.SoftReference,软引用指向的对象在内存没有耗尽的情况下不会被进行垃圾收集,具体的规则为:
a.在不计算软引用的情况下,无论对象是否为垃圾对象,垃圾收集器在抛出内存耗尽异常之前尝试释放软引用指向的对象,但内存耗尽之前不会对软引用指向对象进行垃圾收集。
b.在对软引用指向对象进行垃圾收集时,垃圾收集器以最近最少使用的顺序释放软引用指向的对象。

(3)幻影引用
幻影应用(java.lang.ref.PhantomReference)的功能与前面两种不同。在不计算幻影引用的情况下如果对象成为垃圾,则在垃圾收集器运行时将此对象的引用加入一个指定的引用的队列。
幻影引用的最常见使用情况:对引用队列中的对象指派比Java中的终结机制更灵活的pre-mortem清除操作。
注:Java的终结机制一般是指在对象被垃圾收集器清除出内存之前,自动调用对象的finalize方法进行一些清理的工作。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值