2014-11-14 33 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是一個錯字。我試圖創建一個場景!謝謝 ! –