當我設置一個靜態變量爲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
我剛剛創建了片段來解釋問題,並在該過程中創建了一個錯誤。但是,有人設法爲我回答! –