0
我有一個Singleton服務,它根據系統中發生的事件收集數據。我正在收集這些數據並將它們存儲在一個HashMap
這是這個Singleton服務的成員變量。每隔5分鐘我需要將收集的數據寫入磁盤。java的垃圾回收Runnable
爲此,我正在執行一個Runnable任務。既然不能傳遞參數到Java '運行()' 方法,
創建我工人象下面這樣:
FiveMinuteWorker fiveMinTask = new FiveMinuteWorker(hashMap);// hashMap of this singleton service.
我執行可運行如下:
ScheduledFuture<?> fiveMinTask = fScheduler.scheduleWithFixedDelay(
fiveMinWorker, initialDelay, 5 * 60 * 1000, TimeUnit.MILLISECONDS
);
我有2個的問題。
當Runnable
「運行」我緩存中的數據hashMap
到磁盤,它會被垃圾收集運行或將參考流連,因爲他們持有的HashMap
從集服務,這將永遠保持的參考之後?
在Runnable
HashMap
被緩存到磁盤後,我可以清除它的內容,這將有效地清除單一服務hashMap
中的內容,因爲它具有相同的引用?
在此先感謝。
_「將它運行後的垃圾回收或將引用掛起,因爲他們*持有HashMap的引用」_什麼是第一個「它」?什麼是「他們」 –
它不會被gc'ed,因爲您正在處理同一個實例,而您的服務仍然保留對地圖的引用。如果你在最後清除地圖,它的條目將被gc'ed(如果沒有其他引用)。沒有保證,他們將立即上市。這將取決於您正在使用的Java的GC實現。 – Fildor
旁註:爲什麼「5 * 60 * 1000」和「TimeUnit.MILLISECONDS」而不是「5」和「TimeUnit.MINUTES」? – Fildor