2014-11-14 38 views
0

当我设置一个静态变量为null,将可用于GC?设置为空的静态变量可用于GC?

static Integer jfv;

boolean someMethod(){ 

jfv =10; 
//use for some purpose 

jfv = null 
return true; 
} 

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

编辑:

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

感谢所有的答复

+1

这段代码根本不编译。不知道你是怎么做到的。 – ha9u63ar

+0

我刚刚创建了片段来解释问题,并在该过程中创建了一个错误。但是,有人设法为我回答! –

回答

3

您不能将空值赋值给int变量。

但是你试图做的是无论如何都是错误的。

int类型是一种原始类型......这意味着变量在Java堆中永远不存在独立的存在。因此没有什么可以被垃圾收集的。

现在,如果jfv是引用类型(即,其类型是一个类或一个阵列型),然后分配null它:在

  • 将是合法的,并且
  • 可以结果对象jfv指的是垃圾收集的候选人。

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

  • 如果jfv指的对象是从其他地方可达,那么就不会成为垃圾收集的候选者。

  • 事实的东西是候选人垃圾收集并不意味着它会垃圾回收。这取决于收集器运行的时间......以及其他一些事情。


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

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

+0

感谢您的精心解答。片段中的错字使得它看起来像一个愚蠢的问题 –

3

什么jvf使用包含将可用于回收,但不是它的当前值。
也就是说,如果一个int是一个对象,它不是。

+1

+1。不是你可以首先将'int'字段设置为'null'。 – Thilo

+0

感谢您的回复。 int到null是一个错字。我试图创建一个场景!谢谢 ! –