使用软(弱)引用可以使得内存吃紧jvm进行garbage collection的时候回收掉 只 被软(弱)引用指向的对象,避免oom内存溢出.
使用如下:WeakReference<Object> weakRef = WeakReference<Object>(new Object());
问题来了.
如果之后还有这么一句:Object ref = weakRef;
那么,这个对象算不算是 只 被WeakReference引用?在ref 不被 改变指向的情况下,这个对象会不会被回收?
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
WeakReference是弱引用,SoftReference是软引用
ref是强引用,指向了weakRef,weakRef对象是强可达的,weakRef指向的对象无法通过强引用和软引用reach,所以还是弱可达的,会被回收。
关于可达性和回收时间
An object is weakly reachable if it is neither strongly nor softly
reachable but can be reached by traversing a weak reference. When the
weak references to a weakly-reachable object are cleared, the object
becomes eligible for finalization.
public static void main(String[] args) {
WeakReference<Object> wr = new WeakReference<Object>(new Object());
int i=0;
Object sr2 = wr;
while(true){
System.out.println(i);
if(wr.get()!=null){
i++;
System.out.println("wr can reach "+wr.get());
}else{
System.out.println("null");
break;
}
System.gc();
}
}
测试代码,wr在i=1时即被回收了