在我的一個類中說SimpleDate
,我需要一些對象,如DateFormat
,這些對象可能會在各種實例中使用很多時間。出於這個原因,我想讓它們變成靜態的。在java中創建弱引用的靜態變量
但是,我還希望這些對象應該在需要時進行垃圾回收,當我們沒有任何剩餘的對象SimpleDate
時。靜態聲明不會允許發生這種情況。
所以基本上我想如果不再存在任何聲明類的對象像
private weakstatic DateFormat df = DateFormat.getInstance();
這DateFormat
實例應該有資格進行垃圾回收。此外,每當創建任何聲明類的新實例時,都應該重新初始化它。通過這種方式,我們可以避免重複使用對象的重新創建,也可以在不再需要時釋放內存。
我知道應該可以使用WeakReferences。但是,我無法想出辦法。
編輯︰ DateFormat可能是一個錯誤的候選人,因爲它不是線程安全的。但它應該像聲明它們是靜態一樣是線程安全的。
這個想法是,我們經常使變量靜態的跨實例使用。這些變量一直存在直到申請程序結束。所以如果你只是觸碰一個類,它的靜態變量會永遠留在內存中。
由於以下幾個原因,這是一個糟糕的主意,尤其是因爲'SimpleDateFormat'不是線程安全的,所以如果沒有某種形式的同步就無法在線程之間安全地共享。其次,這不是多麼弱的引用工作,第三,你有數據證明你的'DateFormat'實例導致內存問題? – biziclop 2015-02-11 10:46:22
添加到biziclop寫的關於線程(非)安全性的內容中,如果使用'SImpleDateFormat',請查看'ThreadLocal'。 – vikingsteve 2015-02-11 10:49:06
謝謝。也許DateFormat在這裏是一個錯誤的候選人。但是它應該和聲明靜態一樣安全。我們的想法是,我們經常使用變量static來跨越實例。這些變量一直存在直到申請程序結束。 – adwiv 2015-02-11 10:50:46