开发者社区> 问答> 正文

软引用回收的问题

使用软(弱)引用可以使得内存吃紧jvm进行garbage collection的时候回收掉 只 被软(弱)引用指向的对象,避免oom内存溢出.
使用如下:
WeakReference<Object> weakRef = WeakReference<Object>(new Object());
问题来了.
如果之后还有这么一句:
Object ref = weakRef;
那么,这个对象算不算是 只 被WeakReference引用?在ref 不被 改变指向的情况下,这个对象会不会被回收?

展开
收起
蛮大人123 2016-02-22 15:09:56 2329 0
1 条回答
写回答
取消 提交回答
  • 我说我不帅他们就打我,还说我虚伪

    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时即被回收了

    2019-07-17 18:46:43
    赞同 展开评论 打赏
问答分类:
问答地址:
问答排行榜
最热
最新

相关电子书

更多
JVM的GC 立即下载
低代码开发师(初级)实战教程 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载