使用软(弱)引用可以使得内存吃紧jvm进行garbage collection的时候回收掉 只 被软(弱)引用指向的对象,避免oom内存溢出.
使用如下:
WeakReference<Object> weakRef = WeakReference<Object>(new Object());
问题来了.
如果之后还有这么一句:
Object ref = weakRef;
那么,这个对象算不算是 只 被WeakReference引用?在ref 不被 改变指向的情况下,这个对象会不会被回收?
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号
WeakReference是弱引用,SoftReference是软引用
ref是强引用,指向了weakRef,weakRef对象是强可达的,weakRef指向的对象无法通过强引用和软引用reach,所以还是弱可达的,会被回收。
测试代码,wr在i=1时即被回收了
要搞清楚一点,你的
弱引用对象
指向Object对象
。然后你把Object对象的
引用ref
又指向了弱引用对象
。只要一个对象只被软引用所引用,这个对象就不会活到下次垃圾收集发生后。
所以,回答你的两个问题:
这个对象是只被WeakReference对象所引用。
在这个WearReference对象引用不改变指向的情况下,Object对象会存活到下一次垃圾收集发生前。