strong/soft/weak/phantom reference比较

1.strong reference
    就是常见的引用,比如 
    String str = "hello world";
    其中,str就是strong reference,
    在可达性分析中,如果此实例不可到达,此时才会被jvm回收.
2.soft reference
    在jvm在抛出OOM之前会首先进行检查,如果soft reference实例没有强引用,
    那么会首先进行垃圾回收回收此实例,
    如果垃圾回收之后仍然内存不够,再抛出OOM.
3.weak reference
    如果weak reference没有强引用引用它,那么在这个时候,
    或者稍迟一点的时间,weak reference就会被回收,
    使用例子:jdk的WeakHashMap,要注意的是因为WeakHashMap中Entry是weak reference引用,而value不是,
    所以要显式从WeakHashMap里面清除value及其相关Entry。
4.phantom reference
    这个和之前三种引用差异较大,主要是为了提供另一种类似于finalize机制,
    实现了phantom reference的实例在不可到达的时候会被回收,和强引用回收时机一样。
    除了strong reference,后面三种一般搭配ReferenceQueue使用,
    在回收的时候通过queue.poll,返回被回收的实例,
    然后进行日志打印,监控,补偿操作等处理.
    参考链接:
    http://www.onkarjoshi.com/blog/186/garbage-collection-and-reachability-strong-soft-weak-phantom-unreachable/
    https://stackoverflow.com/questions/9809074/java-difference-between-strong-soft-weak-phantom-reference
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值