Hazelcast ScheduledExecutorService

Hazelcast ScheduledExecutorService

使用来自 hazelcast 3.8 的 ScheduledExecutorService 我遇到了内存不足异常。问题是我正在提供一项服务,该服务应提醒用户一天中发生的某些事件。任务的执行应该是容错的。 用户设置新的提醒是ScheduledExecutorService的一个任务,因此每天的任务量可以达到几千个。每个任务使用 schedule(Runnable command, long delay, TimeUnit unit) 作为一次性操作添加到调度程序。延迟不能超过 24 小时。当我开始进行测试并在循环中添加任务时,出现了 oom 异常。我以为执行后的任务会从内存中删除,但可能我错了。

你能回答几个问题吗:

  1. 任务执行后是否应该从内存中删除?
  2. 是否有任何设置可以做到这一点?
  3. 我可以将 ScheduledExecutorService 用于很多一次性操作任务吗?
  4. 是否有另一种方法可以使用 hazelcast bit 解决我的任务而不使用 ScheduledExecutorService
  1. future.dispose();
  2. 是的,您可以按特定频率安排执行程序服务 运行,如果所有迭代的服务执行都相同,它可以检查用户偏好。

        HazelcastInstance instance = Hazelcast.newHazelcastInstance();

        IScheduledExecutorService scheduler = instance.getScheduledExecutorService("scheduler");
        IScheduledFuture future = scheduler.schedule(named("MyTask",
                new EchoTask("foobar")), 1, TimeUnit.SECONDS);

        Object result = future.get();
        System.out.println(future.getHandler().getTaskName() + " result: " + result);

        future.dispose();

        System.out.println("Press any key to exit");
        System.in.read();
        Hazelcast.shutdownAll();

我们正在使用调度执行器服务来 运行 在一定延迟后运行的任务,但看起来任务在执行后并未从内存中删除。我们通过遍历 executorService.getAllScheduledFutures() 并检查大小来进行验证。