我正在阅读this,因为我在我的代码中遇到了与弱引用相关的一些内存问题,当我看到这个小注释时:
使用后必须明确设置对null的强引用:
这一点并不那么明显:一旦超出范围,您可能会认为强大的参考不再存在。但是,JVM不需要这样做,并且为了效率,不会。强引用仍然存在于堆栈框架中,并且可能妨碍垃圾收集。
这仍然是真的吗?如果我这样做:
void foo(){
Object obj = weakRef.get();
doStuffWith(obj);
}
当我完成方法时,是否需要设置obj = null
,否则我会泄漏obj?
答案 0 :(得分:0)
JVM确实不需要这样做。事实上,JVM根本不需要做GC。
但是没有使本地引用无效的JVM与不执行GC的JVM一样不合理。
(好吧,有些人为JVM提供了巨大的内存,并完全关闭了GC;他们每隔N天就会重启一次。)