当我设置一个静态变量为null,将可用于GC?设置为空的静态变量可用于GC?
static Integer jfv;
boolean someMethod(){
jfv =10;
//use for some purpose
jfv = null
return true;
}
在这种情况下,jfv会被GC选中吗?
编辑:
有错字,问题是分配是空值后,可用于GC静态对象。
感谢所有的答复
当我设置一个静态变量为null,将可用于GC?设置为空的静态变量可用于GC?
static Integer jfv;
boolean someMethod(){
jfv =10;
//use for some purpose
jfv = null
return true;
}
在这种情况下,jfv会被GC选中吗?
编辑:
有错字,问题是分配是空值后,可用于GC静态对象。
感谢所有的答复
您不能将空值赋值给int
变量。
但是你试图做的是无论如何都是错误的。
int
类型是一种原始类型......这意味着变量在Java堆中永远不存在独立的存在。因此没有什么可以被垃圾收集的。
现在,如果jfv
是引用类型(即,其类型是一个类或一个阵列型),然后分配null
它:在
jfv
指的是垃圾收集的候选人。注意,最后一颗子弹是合格的:
如果jfv
指的对象是从其他地方可达,那么就不会成为垃圾收集的候选者。
事实的东西是候选人垃圾收集并不意味着它会是垃圾回收。这取决于收集器运行的时间......以及其他一些事情。
最后,它通常是一个坏主意,试图Java对象垃圾回收的时候影响/控制。让垃圾收集器处理它。这有一些例外;阅读有关Java内存泄漏的信息。
static
变量的错误使用是内存泄漏的常见原因......但将静态随机分配null
不是解决方案。
感谢您的精心解答。片段中的错字使得它看起来像一个愚蠢的问题 –
什么jvf
使用包含将可用于回收,但不是它的当前值。
也就是说,如果一个int
是一个对象,它不是。
+1。不是你可以首先将'int'字段设置为'null'。 – Thilo
感谢您的回复。 int到null是一个错字。我试图创建一个场景!谢谢 ! –
这段代码根本不编译。不知道你是怎么做到的。 – ha9u63ar
我刚刚创建了片段来解释问题,并在该过程中创建了一个错误。但是,有人设法为我回答! –