Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/401.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用Hazelcast的执行器_Java_Executorservice_Hazelcast - Fatal编程技术网

Java 使用Hazelcast的执行器

Java 使用Hazelcast的执行器,java,executorservice,hazelcast,Java,Executorservice,Hazelcast,我一直在调试Hazelcast实例中的内存问题。我正在使用Hazelcast实现我的executor服务。我不需要从执行者那里得到结果,我只是继续通过 executorService.executeOnMember(Runnable, member); 它可以正常运行一段时间,然后内存就满了 我工具线程转储,我可以看到这一点 at com.hazelcast.executor.RunnableAdapter.call(RunnableAdapter.java:49) a

我一直在调试Hazelcast实例中的内存问题。我正在使用Hazelcast实现我的executor服务。我不需要从执行者那里得到结果,我只是继续通过

executorService.executeOnMember(Runnable, member);
它可以正常运行一段时间,然后内存就满了

我工具线程转储,我可以看到这一点

        at com.hazelcast.executor.RunnableAdapter.call(RunnableAdapter.java:49)
    at java.util.concurrent.FutureTask.run(FutureTask.java:262)
    at com.hazelcast.executor.DistributedExecutorService$CallableProcessor.run(DistributedExecutorService.java:187)
    at com.hazelcast.util.executor.CachedExecutorServiceDelegate$Worker.run(CachedExecutorServiceDelegate.java:186)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
    at java.lang.Thread.run(Thread.java:745)
    at com.hazelcast.util.executor.HazelcastManagedThread.executeRun(HazelcastManagedThread.java:76)
    at com.hazelcast.util.executor.HazelcastManagedThread.run(HazelcastManagedThread.java:92)

我首先想到的是提交的作业在完成后被销毁,或者我需要手动编写代码。这是因为我们正在使用FutureTask,它与返回对象时使用的内容相同

完成后,您不需要破坏您的工作。Hazelcast在执行作业时将其从工作队列中移除,其余的由gc处理

关于内存已满:你遇到了OOME?默认情况下,IExecutorService将继续接受任务,而不查看可用内存量。如果你生产任务的速度比消耗任务的速度快,这会导致OOME

但是您可以在ExecutorConfig上设置queueCapacity。一旦达到最大容量,在调用端您将得到一个RejectedExecutionException。你可以用它来施加一些反压力