Java Runnable 的垃圾回收



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

为此,我正在执行一个可运行的任务。由于我无法将参数传递给java 'run()'方法,

我像下面这样创建了我的工人:

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

我执行可运行的,如下所示:

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

我有两个问题。

Runnable"运行"时,我将hashMap中的数据缓存到磁盘,它是在运行后被垃圾回收还是引用会因为持有来自 Singleton Service 的HashMap引用而闲置,这将永远保留?

RunnableHashMap缓存到磁盘后,我可以清除其内容,这将有效地清除单例服务中的内容hashMap因为它是相同的引用?

提前谢谢。

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

最新更新