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