当我将静态变量设置为null时,GC可用吗?
static Integer jfv;
boolean someMethod(){
jfv =10;
//use for some purpose
jfv = null
return true;
}
在这种情况下,GC会选择jfv吗?
编辑:
有错字,问题是在分配空值后可用于GC的静态对象。
感谢所有回复
答案 0 :(得分:3)
要使用的jvf
包含的内容可用于回收,但不能用于当前值。
也就是说,如果int
是一个对象,那就不是。
答案 1 :(得分:3)
您无法为int
变量指定null。
但无论如何,你要做的事情是错误的。
int
类型是基本类型......这意味着int
变量在Java堆中不会独立存在。因此,没有什么可以被垃圾收集。
现在,如果jfv
是引用类型(即其类型是类或数组类型),则为其分配null
:
jfv
引用的对象成为垃圾回收的候选对象。请注意,最后一颗子弹是合格的:
如果jfv
引用的对象可从其他地方到达,则它不会成为垃圾回收的候选对象。
事实上,某些东西是垃圾收集的候选并不意味着将被垃圾收集。这取决于收集器何时运行...以及其他一些事情。
最后,尝试影响/控制Java对象何时被垃圾收集通常是一个坏主意。让垃圾收集器处理它。这有一些例外;阅读有关Java内存泄漏的信息。
错误使用static
变量是内存泄漏的常见原因......但是随机分配null
不是解决方案。