Java Hazelcast ScheduledExecutorService

Java Hazelcast ScheduledExecutorService,java,spring,distributed-computing,hazelcast,hazelcast-imap,Java,Spring,Distributed Computing,Hazelcast,Hazelcast Imap,使用hazelcast 3.8中的ScheduledExecutorService,我遇到了内存不足异常。问题是我正在做一项服务,它应该提醒用户一天中的一些事件。任务的执行应该是容错的。 用户设置新的提醒,这是ScheduledExecutorService的一项任务,因此每天的任务量可以达到数千。每个任务都使用调度(可运行命令、长延迟、时间单位)作为一次性操作添加到调度程序中。延迟时间不能超过24小时。当我开始进行测试并在循环中添加任务时,我遇到了一个oom异常。我以为执行后的任务会从内存中删

使用hazelcast 3.8中的ScheduledExecutorService,我遇到了内存不足异常。问题是我正在做一项服务,它应该提醒用户一天中的一些事件。任务的执行应该是容错的。 用户设置新的提醒,这是ScheduledExecutorService的一项任务,因此每天的任务量可以达到数千。每个任务都使用调度(可运行命令、长延迟、时间单位)作为一次性操作添加到调度程序中。延迟时间不能超过24小时。当我开始进行测试并在循环中添加任务时,我遇到了一个oom异常。我以为执行后的任务会从内存中删除,但可能我错了

你能回答几个问题吗

  • 任务执行后是否应从内存中删除
  • 有任何设置可以这样做吗
  • 我可以将ScheduledExecutorService用于许多一次性操作任务吗
  • 有没有其他方法可以解决hazelcast bit Not使用ScheduledExecutorService的任务
  • future.dispose()
  • 是的,您可以让预定的executor服务以特定的频率运行,并且它可以检查用户的偏好,如果所有迭代的服务执行都是相同的
  • HazelcastInstance=Hazelcast.newHazelcastInstance();
    isScheduledExecutorService调度器=实例.getScheduledExecutorService(“调度器”);
    isScheduledFuture=scheduler.schedule(名为“MyTask”,
    新的EchoTask(“foobar”)),1,时间单位。秒);
    对象结果=future.get();
    System.out.println(future.getHandler().getTaskName()+“result:”+result);
    future.dispose();
    System.out.println(“按任意键退出”);
    System.in.read();
    
    Hazelcast.shutdownlall()我们正在使用schedule executor服务在一定延迟后运行可运行的任务,但任务似乎在执行后未从内存中删除。我们正在通过迭代executorService.getAllScheduledFutures()进行验证,并检查大小。

    @Slick-它在执行后是否被删除?我认为在scheduledTask运行或取消时,必须随时调用future.dispose()。当我试图安排很多任务,甚至每个任务都执行时,我得到了“已达到最大容量”。这似乎并没有回答问题。这项任务可能推迟了几个小时。任务完成后必须调用dispose()?那么您还必须存储通过提交任务创建的所有未来?如果任务在不同的节点上执行会怎么样?你怎么知道什么时候处置未来?此解决方案将线程保留在future.get()上,直到计划的延迟完成;在这种情况下,为什么不直接使用Thread.wait()?