java Runnable的垃圾收集

时间:2013-10-18 03:56:57

标签: java garbage-collection runnable

我有Singleton Service,它根据系统中发生的事件收集数据。我正在收集这些数据并将它们存储在HashMap中,这是此Singleton服务的成员变量。每隔5分钟我需要将收集的数据写入磁盘。

为此,我正在执行Runnable任务。因为我无法将参数传递给java'run()'方法,

我创建了我的工作人员,如下所示:

FiveMinuteWorker fiveMinTask = new FiveMinuteWorker(hashMap);// hashMap of this singleton service.

我按如下方式执行runnable:

ScheduledFuture<?> fiveMinTask = fScheduler.scheduleWithFixedDelay(
                fiveMinWorker, initialDelay, 5 * 60 * 1000, TimeUnit.MILLISECONDS
        );

我有两个问题。

Runnable'运行'时,我将hashMap中的数据缓存到磁盘,它会在运行后被垃圾收集,还是引用会挂起,因为它们保留了{{1}的引用来自Singleton Service,它将永远存在?

HashMap Runnable缓存到磁盘后,我可以清除其内容,这将有效地清除Singleton Service HashMap中的内容,因为它的引用相同?

提前致谢。

1 个答案:

答案 0 :(得分:0)

scheduleWithFixedDelay()函数每次运行时都不会创建fiveMinWorker的新实例。每次在您设置的时间段后运行时,它都使用相同的实例。所以基本上总是只有一个五个工作者的实例,无论这个任务运行多少次。