软引用回收的问题 -问答-阿里云开发者社区-阿里云

开发者社区> 问答> 正文
阿里云
为了无法计算的价值
打开APP
阿里云APP内打开

软引用回收的问题

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

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

    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 最佳实践手册
立即下载