设置为null的静态变量可用于GC?

时间:2014-11-14 00:16:02

标签: java static

当我将静态变量设置为null时,GC可用吗?

static Integer jfv;

boolean someMethod(){

jfv =10;
//use for some purpose

jfv = null
return true;
}

在这种情况下,GC会选择jfv吗?

编辑:

有错字,问题是在分配空值后可用于GC的静态对象。

感谢所有回复

2 个答案:

答案 0 :(得分:3)

要使用的jvf 包含的内容可用于回收,但不能用于当前值。
也就是说,如果int是一个对象,那就不是。

答案 1 :(得分:3)

您无法为int变量指定null。

但无论如何,你要做的事情是错误的。

int类型是基本类型......这意味着int变量在Java堆中不会独立存在。因此,没有什么可以被垃圾收集。

现在,如果jfv是引用类型(即其类型是类或数组类型),则为其分配null

  • 是合法的,
  • 可能会导致jfv引用的对象成为垃圾回收的候选对象。

请注意,最后一颗子弹是合格的:

  • 如果jfv引用的对象可从其他地方到达,则它不会成为垃圾回收的候选对象。

  • 事实上,某些东西是垃圾收集的候选并不意味着被垃圾收集。这取决于收集器何时运行...以及其他一些事情。


最后,尝试影响/控制Java对象何时被垃圾收集通常是一个坏主意。让垃圾收集器处理它。这有一些例外;阅读有关Java内存泄漏的信息。

错误使用static变量是内存泄漏的常见原因......但是随机分配null不是解决方案。